合併重疊的日期間隔(改進的解決方案)
合併重疊的日期間隔是資料處理中的常見任務。雖然提供的解決方案很簡單,但它可能不是最有效或最全面的。這是解決潛在邊緣情況的改進解決方案:
-- Retrieve the overlapping ranges SELECT s1.StartDate, MIN(t1.EndDate) AS EndDate FROM @T s1 INNER JOIN @T t1 ON s1.StartDate <= t1.EndDate AND NOT EXISTS(SELECT * FROM @T t2 WHERE t1.EndDate >= t2.StartDate AND t1.EndDate < t2.EndDate) GROUP BY s1.StartDate -- Exclude subintervals EXCEPT -- Find overlapping intervals with extended end dates SELECT s1.StartDate, MAX(t1.EndDate) AS EndDate FROM @T s1 INNER JOIN @T t1 ON s1.StartDate > t1.StartDate AND s1.StartDate <= t1.EndDate GROUP BY s1.StartDate
此查詢考慮了重疊可能超出原始範圍的情況。 EXCEPT 子句過濾掉這些擴展範圍,從而得到更精確、更完整的合併區間集。
輸出:
StartDate | EndDate 2010-01-01 | 2010-06-13 2010-06-15 | 2010-08-16 2010-11-01 | 2010-12-31
以上是如何有效率地合併重疊的日期間隔?的詳細內容。更多資訊請關注PHP中文網其他相關文章!