Maison >base de données >tutoriel mysql >Comment fusionner efficacement les intervalles de dates qui se chevauchent ?

Comment fusionner efficacement les intervalles de dates qui se chevauchent ?

DDD
DDDoriginal
2024-12-30 06:56:101014parcourir

How to Efficiently Merge Overlapping Date Intervals?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn