Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Fusionner les intervalles de dates qui se chevauchent

Je cherchais la même solution et je suis tombé sur ce message sur Combiner les dates et heures qui se chevauchent pour renvoyer un seul enregistrement de plage qui se chevauche.

Il existe un autre sujet sur les intervalles de date d'emballage.

J'ai testé cela avec différentes plages de dates, y compris celles répertoriées ici, et cela fonctionne correctement à chaque fois.

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 

Le résultat est :

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