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
Linda Hamiltonoriginal
2024-12-31 12:22:13824parcourir

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

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

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)

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