Überlappende Datumsintervalle zusammenführen
Problem:
Kann der Prozess des Zusammenführens überlappender Datumsintervalle durchgeführt werden? Sei verbessert?
Diskussion:
Die im ursprünglichen Beitrag vorgestellte Lösung ist unkompliziert, es stehen jedoch möglicherweise effizientere Methoden zur Verfügung.
Lösung:
Eine alternative Lösung ist vom Beitrag „Kombinieren Sie überlappende Datums- und Uhrzeitangaben, um einen einzelnen überlappenden Bereich zurückzugeben“ inspiriert Datensatz.“
Diese Lösung verwendet eine Unterabfrage, um das maximale Enddatum innerhalb jedes Intervalls zu identifizieren, und führt dann einen Self-Join-Vorgang durch, um überlappende Intervalle zu kombinieren:
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
Ergebnisse:
Mit dieser Lösung werden folgende Ergebnisse erzielt:
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 |
Das obige ist der detaillierte Inhalt vonKann die Zusammenführung überlappender Datumsintervalle für mehr Effizienz optimiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!