求 MS SQL 高手指导
startdate enddate
2015-01-01 2015-02-08
2015-01-20 2015-02-01
2015-02-09 2015-02-17
2015-02-15 2015-03-21
2015-02-28 2015-03-26
2015-03-24 2015-04-15
如何把以上 合并成以下
startdate enddate
2015-01-01 2015-04-15
如果是这样的
startdate enddate
2015-01-01 2015-02-08
2015-01-20 2015-02-01
2015-02-09 2015-02-17
2015-02-28 2015-03-26
2015-03-24 2015-04-15
合并成以下
startdate enddate
2015-01-01 2015-02-17
2015-02-28 2015-04-15
------解决思路----------------------
;WITH CTE AS(如果你每行都有一个唯一的属性,则可以再简化一下
SELECT NEWID()ID,startdate,enddate FROM TB
)
,start AS(
SELECT startdate,ROW_NUMBER()OVER(ORDER BY startdate)RN
FROM CTE T1
WHERE NOT EXISTS(
SELECT 1 FROM CTE T2 WHERE T1.ID<>T2.ID
AND T1.startdate>T2.startdate AND T1.startdate<=DATEADD(DAY,1,T2.enddate)
)
GROUP BY startdate
)
,stop AS(
SELECT enddate,ROW_NUMBER()OVER(ORDER BY enddate)RN
FROM CTE T1
WHERE NOT EXISTS(
SELECT 1 FROM CTE T2 WHERE T1.ID<>T2.ID
AND T1.enddate>=DATEADD(DAY,-1,T2.startdate)AND T1.enddate<T2.enddate
)
GROUP BY enddate
)
SELECT startdate,enddate
FROM start JOIN stop ON start.RN=stop.RN