Maison > base de données > tutoriel mysql > Comment pouvons-nous fusionner efficacement les intervalles de dates qui se chevauchent ?

Comment pouvons-nous fusionner efficacement les intervalles de dates qui se chevauchent ?

Mary-Kate Olsen
Libérer: 2024-12-30 21:43:15
original
693 Les gens l'ont consulté

How Can We Efficiently Merge Overlapping Date Intervals?

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 
Copier après la connexion

Explication :

Cette approche fonctionne comme suit :

  • Il joint d'abord la table avec lui-même pour identifier les paires d'intervalles qui se chevauchent.
  • Il applique ensuite une condition pour filtrer élimine les intervalles qui se chevauchent avec d'autres.
  • Ensuite, il élimine tous les intervalles qui se chevauchent avec d'autres intervalles non filtrés.
  • Enfin, il regroupe les intervalles par leurs dates de début et calcule la date de fin minimale. pour chacun groupe.

Avantages :

  • Cette approche évite le besoin de mises à jour itératives, qui peuvent être plus efficaces dans certains scénarios.
  • Il produit des résultats cohérents quel que soit l'ordre de saisie de intervalles.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal