Saya sedang mencari solusi yang sama dan menemukan posting ini di Combine overlapping datetime untuk mengembalikan satu record rentang yang tumpang tindih.
Ada utas lain tentang Interval Tanggal Pengepakan.
Saya menguji ini dengan berbagai rentang tanggal, termasuk yang tercantum di sini, dan selalu berfungsi dengan benar.
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
Hasilnya adalah:
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