Fusionner des intervalles de dates qui se chevauchent : une approche efficace
La tâche de fusionner des intervalles de dates qui se chevauchent se pose fréquemment dans divers contextes. Une approche courante pour résoudre ce problème consiste à mettre à jour les intervalles de manière itérative jusqu'à ce qu'il n'y ait plus de chevauchements. Bien que cette méthode soit relativement simple, elle soulève la question de savoir s'il existe des alternatives plus efficaces.
Approche alternative :
Une approche alternative pour fusionner des intervalles de dates qui se chevauchent a été proposée. par un utilisateur dans un fil de discussion connexe. Cette méthode exploite une combinaison de jointures et de logique conditionnelle pour obtenir le résultat souhaité.
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
Explication :
Cette approche fonctionne comme suit :
Avantages :
Exemple :
En utilisant les mêmes exemples de données fournis dans la question d'origine, les résultats suivants sont obtenus :
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 |
Conclusion :
L'approche alternative présentée offre un moyen efficace de fusionner des dates qui se chevauchent intervalles. Il exploite une combinaison de jointures et de logique conditionnelle pour obtenir le résultat souhaité, offrant ainsi une alternative viable à l'approche itérative.
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!