Maison >base de données >tutoriel mysql >Comment générer des dates sur plusieurs plages de dates en SQL ?

Comment générer des dates sur plusieurs plages de dates en SQL ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-04 10:12:34688parcourir

How to Generate Dates Across Multiple Date Ranges in SQL?

Génération de dates entre plusieurs plages de dates

Le problème de génération de dates entre deux dates données est assez courant. Cependant, lorsqu’il s’agit de plusieurs plages de dates, la solution peut devenir plus complexe. Cette question sur StackOverflow présente un de ces scénarios et fournit une solution élégante utilisant une vue en ligne et une requête récursive :

select 
  A.ID, 
  A.START_DATE+delta dt
from 
  t_dates A, 
  (
     select level-1 as delta 
     from dual 
     connect by level-1 <= (
       select max(end_date - start_date) from t_dates
     )
  )
where A.START_DATE+delta <= A.end_date
order by 1, 2

La vue en ligne calcule une plage de deltas de 1 à la différence maximale entre le début et la fin. dates de n’importe quelle plage du tableau à l’aide d’une requête récursive. Cette plage de deltas est ensuite utilisée dans la requête principale pour générer toutes les dates entre les dates de début et de fin de chaque plage.

La requête rejoint d'abord la table t_dates avec la vue en ligne, générant toutes les paires possibles de deltas. dates et deltas. Il filtre ensuite les paires pour lesquelles la date résultante serait au-delà de la date de fin de la plage correspondante. Enfin, la requête trie les résultats par ID et par date.

Cette solution est flexible et peut être utilisée pour générer des dates pour n'importe quel nombre de plages de dates. Il exploite la puissance des requêtes récursives pour fournir un moyen concis et efficace de résoudre ce problème.

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!

Déclaration:
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