Dans le domaine de l'analyse des données, il est courant de rencontrer des plages de temps ou des intervalles de dates qui se chevauchent. Pour fusionner efficacement ces intervalles qui se chevauchent en enregistrements distincts, une solution robuste et efficace est nécessaire.
Une approche simple pour fusionner des intervalles de dates qui se chevauchent est présentée dans la question donnée, en utilisant une série d'instructions UPDATE dans une boucle. Bien que cette méthode permette d'obtenir le résultat souhaité, elle introduit la question de savoir s'il existe une solution plus élégante ou plus performante.
Une approche alternative, mise en œuvre dans la réponse fournie, exploite la puissance des sous-requêtes corrélées et des conditions NON EXISTES. Cette approche implique plusieurs instructions SQL qui fonctionnent conjointement pour identifier et fusionner les intervalles qui se chevauchent :
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
Décomposition des étapes :
Cette approche offre des performances et une clarté améliorées par rapport à l'itérative Méthode UPDATE, ce qui en fait une solution privilégiée pour fusionner des intervalles de dates qui se chevauchent dans les environnements SQL.
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!