Heim >Datenbank >MySQL-Tutorial >Wie können wir überlappende Datumsintervalle effizient zusammenführen?

Wie können wir überlappende Datumsintervalle effizient zusammenführen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-30 21:43:15711Durchsuche

How Can We Efficiently Merge Overlapping Date Intervals?

Überlappende Datumsintervalle zusammenführen: Ein effizienter Ansatz

Die Aufgabe, überlappende Datumsintervalle zusammenzuführen, stellt sich häufig in verschiedenen Kontexten. Ein gängiger Ansatz zur Lösung dieses Problems besteht darin, Intervalle iterativ zu aktualisieren, bis keine weiteren Überlappungen mehr bestehen. Obwohl diese Methode relativ einfach ist, wirft sie die Frage auf, ob es effizientere Alternativen gibt.

Alternativer Ansatz:

Es wurde ein alternativer Ansatz zum Zusammenführen überlappender Datumsintervalle vorgeschlagen von einem Benutzer in einem verwandten Forenthread. Diese Methode nutzt eine Kombination aus Verknüpfungen und bedingter Logik, um das gewünschte Ergebnis zu erzielen.

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

Erklärung:

Dieser Ansatz funktioniert wie folgt:

  • Es verknüpft zunächst die Tabelle mit sich selbst, um Paare überlappender Intervalle zu identifizieren.
  • Dann wendet es eine Bedingung an Filtern Sie Intervalle heraus, die sich mit anderen überschneiden.
  • Als nächstes werden alle Intervalle entfernt, die sich mit anderen nicht gefilterten Intervallen überschneiden.
  • Abschließend werden die Intervalle nach ihrem Startdatum gruppiert und das Mindestende berechnet Datum für jeden Gruppe.

Vorteile:

  • Dieser Ansatz vermeidet die Notwendigkeit iterativer Aktualisierungen, die in bestimmten Szenarien effizienter sein können.
  • Es liefert unabhängig von der Eingabereihenfolge konsistente Ergebnisse Intervalle.

Beispiel:

Unter Verwendung derselben Beispieldaten, die in der ursprünglichen Frage angegeben wurden, werden die folgenden Ergebnisse erhalten:

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

Fazit:

Der vorgestellte alternative Ansatz bietet eine effiziente Möglichkeit, überlappende Daten zusammenzuführen Intervalle. Es nutzt eine Kombination aus Verknüpfungen und bedingter Logik, um das gewünschte Ergebnis zu erzielen, und bietet so eine praktikable Alternative zum iterativen Ansatz.

Das obige ist der detaillierte Inhalt vonWie können wir ü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