sql >> Databasteknik >  >> RDS >> Sqlserver

Slå samman överlappande datumintervall

Jag letade efter samma lösning och hittade det här inlägget om Kombinera överlappande datum och tid för att returnera en enda överlappande intervallpost.

Det finns en annan tråd om förpackningsdatumsintervaller.

Jag testade detta med olika datumintervall, inklusive de som listas här, och det fungerar korrekt varje gång.

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 

Resultatet är:

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


  1. Åtkomst med Microsoft SQL Server – Importera stora datamängder med SSIS

  2. Ansluta en 64-bitars applikation till Acomba

  3. Använder pyspark för att ansluta till PostgreSQL

  4. Tankar om SQL Server 2019 Editions