Heim >Datenbank >MySQL-Tutorial >Wie lassen sich überlappende Datumsintervalle effizient zusammenführen?

Wie lassen sich überlappende Datumsintervalle effizient zusammenführen?

DDD
DDDOriginal
2024-12-30 06:56:101072Durchsuche

How to Efficiently Merge Overlapping Date Intervals?

Überlappende Datumsintervalle zusammenführen (verbesserte Lösung)

Überlappende Datumsintervalle zusammenführen ist eine häufige Aufgabe in der Datenverarbeitung. Obwohl die bereitgestellte Lösung einfach ist, ist sie möglicherweise nicht die effizienteste oder umfassendste. Hier ist eine verbesserte Lösung, die potenzielle Grenzfälle berücksichtigt:

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

Diese Abfrage berücksichtigt Fälle, in denen die Überlappungen über den ursprünglichen Bereich hinausgehen können. Die EXCEPT-Klausel filtert diese erweiterten Bereiche heraus, was zu einem genaueren und vollständigeren zusammengeführten Intervallsatz führt.

Ausgabe:

StartDate  | EndDate
2010-01-01 | 2010-06-13
2010-06-15 | 2010-08-16
2010-11-01 | 2010-12-31

Das obige ist der detaillierte Inhalt vonWie lassen sich überlappende Datumsintervalle effizient zusammenführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn