合併重疊日期間隔是否有更好的方法?
我提出的解決方案非常簡單,現在我想知道是否有其他人更好地瞭解如何做到這一點。合併重疊日期間隔
/***** DATA EXAMPLE *****/
DECLARE @T TABLE (d1 DATETIME, d2 DATETIME)
INSERT INTO @T (d1, d2)
SELECT '2010-01-01','2010-03-31' UNION SELECT '2010-04-01','2010-05-31'
UNION SELECT '2010-06-15','2010-06-25' UNION SELECT '2010-06-26','2010-07-10'
UNION SELECT '2010-08-01','2010-08-05' UNION SELECT '2010-08-01','2010-08-09'
UNION SELECT '2010-08-02','2010-08-07' UNION SELECT '2010-08-08','2010-08-08'
UNION SELECT '2010-08-09','2010-08-12' UNION SELECT '2010-07-04','2010-08-16'
UNION SELECT '2010-11-01','2010-12-31' UNION SELECT '2010-03-01','2010-06-13'
/***** INTERVAL ANALYSIS *****/
WHILE (1=1) BEGIN
UPDATE t1 SET t1.d2 = t2.d2
FROM @T AS t1 INNER JOIN @T AS t2 ON
DATEADD(day, 1, t1.d2) BETWEEN t2.d1 AND t2.d2
IF @@ROWCOUNT = 0 BREAK
END
/***** RESULT *****/
SELECT StartDate = MIN(d1) , EndDate = d2
FROM @T
GROUP BY d2
ORDER BY StartDate, EndDate
/***** OUTPUT *****/
/*****
StartDate EndDate
2010-01-01 2010-06-13
2010-06-15 2010-08-16
2010-11-01 2010-12-31
*****/
是間隔開開,閉閉,開閉或閉開?這很重要,因爲最終條件略有不同。出於多種目的,開放式關閉(包括第一次約會,不包括第二次約會)是最好的表現形式;公開(包括兩端)往往是人們想到的。 – 2010-04-01 14:56:33
喬納森,我在考慮當(開始日期和結束日期)天都是期間的一部分的情況。 – leoinfo 2010-04-01 15:09:52
可以單程執行,但它是一個遊標實現,因此它取決於數據集的大小。 – 2010-05-02 11:22:06