Tôi đang tìm kiếm giải pháp tương tự và bắt gặp bài đăng này về Kết hợp ngày giờ trùng lặp để trả về bản ghi phạm vi trùng lặp.
Có một chủ đề khác về Khoảng thời gian ngày đóng gói.
Tôi đã thử nghiệm điều này với nhiều phạm vi ngày khác nhau, bao gồm cả những phạm vi được liệt kê ở đây và nó hoạt động chính xác mọi lúc.
SELECT
s1.StartDate,
--t1.EndDate
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)
WHERE NOT EXISTS(SELECT * FROM @T s2
WHERE s1.StartDate > s2.StartDate AND s1.StartDate <= s2.EndDate)
GROUP BY s1.StartDate
ORDER BY s1.StartDate
Kết quả là:
StartDate | EndDate
2010-01-01 | 2010-06-13
2010-06-15 | 2010-06-25
2010-06-26 | 2010-08-16
2010-11-01 | 2010-12-31