मैं एक ही समाधान की तलाश में था और सिंगल ओवरलैपिंग रेंज रिकॉर्ड वापस करने के लिए ओवरलैपिंग डेटाटाइम को मिलाएं पर इस पोस्ट में आया था।
पैकिंग दिनांक अंतराल पर एक और सूत्र है।
मैंने विभिन्न दिनांक सीमाओं के साथ इसका परीक्षण किया, जिसमें यहां सूचीबद्ध तिथियां भी शामिल हैं, और यह हर बार सही ढंग से काम करती है।
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
नतीजा यह है:
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