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

Comment identifier et extraire des plages de dates consécutives en SQL ?

Mary-Kate Olsen
Libérer: 2025-01-03 05:34:38
original
131 Les gens l'ont consulté

How to Identify and Extract Consecutive Date Ranges in SQL?

Identification de plages de dates consécutives en SQL

Question :

Vous devez extraire des plages de dates consécutives d'une table contenant un une seule colonne de dates non triées. Ces plages représentent des segments de temps qui nécessitent des dates de début et de fin pour remplir un objet de calendrier avec précision.

Solution :

Approche :

Pour résoudre ce problème en utilisant SQL, nous pouvons utiliser la méthode "gaps-and-islands". Cette méthode regroupe les dates consécutives par différence avec leur numéro de ligne, car cette valeur reste constante pour chaque séquence consécutive. Nous utilisons ensuite les fonctions MIN() et MAX() pour extraire les dates de début et de fin de chaque groupe.

Requête SQL :

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

Explication :

  • La clause WITH crée une expression de table commune (CTE) nommée t.
  • Le CTE sélectionne la colonne InfoDate d et le numéro de ligne i pour chaque ligne de la table d'origine @d.
  • Les données sont regroupées par InfoDate pour garantir l'unicité au sein de chaque séquence consécutive.
  • L'instruction SELECT calcule les dates minimales et maximales pour chaque groupe, représentant respectivement les dates de début et de fin de plages consécutives.
  • L'instruction SELECT calcule les dates minimales et maximales pour chaque groupe, représentant respectivement les dates de début et de fin de plages consécutives. La fonction DATEDIFF() est utilisée pour calculer la différence entre le numéro de ligne et la date, qui reste constante dans chaque séquence consécutive, regroupant efficacement les dates consécutives.

Sortie :

Le tableau résultant doit contenir les éléments suivants columns :

  • StartDate
  • EndDate

Cette sortie fournit les dates de début et de fin pour chaque plage de dates consécutive, vous permettant de remplir votre objet de calendrier avec les informations de date nécessaires.

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