ok, am revenit..
in primul rand si inainte de orice altceva as vrea sa fac urmatoarea mentiune: din felul cum vrei sa afisezi tu datele banuiesc ca vrei sa le afisezi intr-un raport. (nu am mai facut rapoarte de mult asa ca nu stiu sa iti dau detalii in directia aia)
eu am procedat in felul urmator:
1. am redenumit coloanele end_date = ed si start_date=sd (ca sa imi fie mai usor sa editez queryul de mana)
2. am creat 2 coloane calculate
sdm =(datepart(year,[sd])*(12)+datepart(month,[sd])) -> start date months
edm =(datepart(year,[ed])*(12)+datepart(month,[ed])) -> end date months
(asta ca sa pot calcula diferenta de care ziceai)
3.
am facut queryul urmator:
SELECT TOP (100) PERCENT interval_1.id, interval_1.sd, interval_1.ed, interval_1.name, MIN(dbo.interval.id) AS groupId
FROM dbo.interval INNER JOIN
dbo.interval AS interval_1 ON dbo.interval.name = interval_1.name
WHERE (dbo.interval.edm + 10 - interval_1.sdm > 0) AND (dbo.interval.edm < interval_1.sdm) OR
(interval_1.edm + 10 - dbo.interval.sdm > 0) AND (interval_1.edm < dbo.interval.sdm) OR
(dbo.interval.id = interval_1.id)
GROUP BY interval_1.id, interval_1.sd, interval_1.ed, interval_1.name
rezultatele arata cam asa:
id sd ed name groupId
1 2010-05-05 2010-12-12 aaa 1
2 2011-05-05 2011-12-12 aaa 1
3 2008-01-01 2009-05-05 aaa 3
4 2010-05-05 2010-12-12 bbb 4
daca am intuit bine la inceput si vrei pt un raport atunci groupId ar trebui sa iti permita sa faci afisarea respectiva
daca nu am intuit corect atunci queryul asta ar trebui sa te ajute sa pornesti in directia in care vrei sa mergi.
idea din spatele queryului e urmatoarea:
- s-a facut un join pe nume ca sa pot calcula diferenta
- am ps ultimul "or" (dbo.interval.id = interval_1.id) ca sa acopar grupurile 3 si 4
- am facut restul conditiei ( (dbo.interval.edm + 10 - interval_1.sdm > 0) AND (dbo.interval.edm
< interval_1.sdm) OR
(interval_1.edm + 10 - dbo.interval.sdm > 0)
AND (interval_1.edm < dbo.interval.sdm)) ca sa acopar grupul 1
- am facut gruparea
- am scris "ecuatia" pt groupId ( MIN(dbo.interval.id) AS groupId)
spor in continuare si sper sa iti fie de folos.
PS: am lucrat pe MSSQL 2008