sql >> Database teknologi >  >> RDS >> Sqlserver

Flet overlappende datointervaller

Jeg ledte efter den samme løsning og stødte på dette indlæg om Kombiner overlappende dato og klokkeslæt for at returnere en enkelt overlappende områderegistrering.

Der er en anden tråd om Pakkedato-intervaller.

Jeg testede dette med forskellige datointervaller, inklusive dem, der er anført her, og det fungerer korrekt hver gang.

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 er:

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. Løsning af en kommunikationsforbindelsesfejl med JDBC og MySQL

  2. Sammenligning af datatyper for dato og klokkeslæt i SQL Server

  3. MariaDB Java Connector Driver Ydeevne

  4. Sådan skriver du en CASE-sætning i SQL