Maison >base de données >tutoriel mysql >Comment fusionner efficacement les intervalles de dates qui se chevauchent ?
Fusionner des intervalles de dates qui se chevauchent (solution améliorée)
La fusion d'intervalles de dates qui se chevauchent est une tâche courante dans le traitement des données. Bien que la solution proposée soit simple, elle n’est peut-être pas la plus efficace ou la plus complète. Voici une solution améliorée qui répond aux cas limites potentiels :
-- Retrieve the overlapping ranges SELECT s1.StartDate, 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) GROUP BY s1.StartDate -- Exclude subintervals EXCEPT -- Find overlapping intervals with extended end dates SELECT s1.StartDate, MAX(t1.EndDate) AS EndDate FROM @T s1 INNER JOIN @T t1 ON s1.StartDate > t1.StartDate AND s1.StartDate <= t1.EndDate GROUP BY s1.StartDate
Cette requête prend en compte les cas où les chevauchements peuvent s'étendre au-delà de la plage d'origine. La clause EXCEPT filtre ces plages étendues, ce qui donne lieu à un ensemble d'intervalles fusionnés plus précis et plus complet.
Sortie :
StartDate | EndDate 2010-01-01 | 2010-06-13 2010-06-15 | 2010-08-16 2010-11-01 | 2010-12-31
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!