Maison > base de données > tutoriel mysql > Comment identifier des plages de dates consécutives dans SQL ?

Comment identifier des plages de dates consécutives dans SQL ?

Linda Hamilton
Libérer: 2024-12-31 12:22:13
original
841 Les gens l'ont consulté

How to Identify Consecutive Date Ranges in SQL?

Détecter des plages de dates consécutives à l'aide de SQL

Pour identifier des plages de dates consécutives dans une colonne contenant une séquence de dates, SQL peut être utilisé pour extraire efficacement les dates de début et de fin de chaque plage distincte.

Considérons l'ensemble de données suivant :

InfoDate

2013-12-04
2013-12-05
2013-12-06

2013-12-09
2013-12-10

2014-01-01
2014-01-02
2014-01-03

2014-01-06
2014-01-07

2014-01-29
2014-01-30
2014-01-31

2014-02-03
2014-02-04
Copier après la connexion

L'objectif est d'extraire les dates de début et de fin de chaque plage de dates consécutives, ce qui donne :

StartDate     EndDate

2013-12-04    2013-12-06
2013-12-09    2013-12-10
2014-01-01    2014-01-03
2014-01-06    2014-01-07
2014-01-29    2014-01-31
2014-02-03    2014-02-04
Copier après la connexion

Une solution SQL simplifiée et efficace peut être conçue en suivant les étapes suivantes :

  1. Attribuer un numéro de ligne unique à chaque date de la colonne InfoDate, en créant une table d'assistance nommée t. Cette numérotation facilite le regroupement de dates consécutives.
  2. Regroupez les lignes en t par la différence entre la date et son numéro de ligne correspondant. Ce regroupement crée des « intervalles » dans la séquence de dates.
  3. Au sein de chaque groupe, les dates minimales et maximales représentent les dates de début et de fin de la plage de dates consécutives.

Le SQL la requête pour y parvenir est :

WITH t AS (
  SELECT InfoDate d,ROW_NUMBER() OVER(ORDER BY InfoDate) i
  FROM @d
  GROUP BY InfoDate
)
SELECT MIN(d),MAX(d)
FROM t
GROUP BY DATEDIFF(day,i,d)
Copier après la connexion

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