Maison > base de données > tutoriel mysql > Comment calculer les différences de date entre des lignes consécutives dans SQL ?

Comment calculer les différences de date entre des lignes consécutives dans SQL ?

Mary-Kate Olsen
Libérer: 2025-01-08 08:32:42
original
229 Les gens l'ont consulté

How to Calculate Date Differences Between Consecutive Rows in SQL?

Calcul de la différence de date des lignes consécutives SQL

La détermination de l'intervalle de temps entre des enregistrements consécutifs est cruciale pour l'analyse des données lorsque vous travaillez avec de grands ensembles de données. Dans cet exemple, une requête SQL est nécessaire pour calculer la différence de date entre des lignes consécutives portant le même numéro de compte.

Ce qui suit est une requête possible :

<code class="language-sql">SELECT  T1.ID,
        T1.AccountNumber,
        T1.Date,
        MIN(T2.Date) AS NextDate,
        DATEDIFF(day, T1.Date, MIN(T2.Date)) AS DaysDiff
FROM    YourTable T1
        LEFT JOIN YourTable T2
            ON T1.AccountNumber = T2.AccountNumber
            AND T2.Date > T1.Date
GROUP BY T1.ID, T1.AccountNumber, T1.Date;</code>
Copier après la connexion

Cette requête utilise LEFT JOIN pour comparer chaque ligne du tableau T1 (le tableau d'origine) à toutes les lignes suivantes du tableau T2 qui ont le même numéro de compte. Il utilise ensuite la fonction DATEDIFF pour calculer la différence de date et regroupe les résultats par ID, AccountNumber et Date pour supprimer les lignes en double. DATEDIFF(day, ...) Spécifie le nombre de jours pour calculer la différence.

Une autre méthode est la suivante :

<code class="language-sql">SELECT  ID,
        AccountNumber,
        Date,
        LEAD(Date, 1, NULL) OVER (PARTITION BY AccountNumber ORDER BY Date) AS NextDate,
        DATEDIFF(day, Date, LEAD(Date, 1, NULL) OVER (PARTITION BY AccountNumber ORDER BY Date)) AS DaysDiff
FROM    YourTable;</code>
Copier après la connexion

Cette requête utilise des fonctions de fenêtre LEAD pour obtenir la date de la ligne suivante pour chaque numéro de compte. LEAD(Date, 1, NULL) OVER (PARTITION BY AccountNumber ORDER BY Date) Obtenez la date de la ligne suivante de la ligne actuelle, ou renvoyez NULL s'il n'y a pas de ligne suivante. Calculez ensuite la différence de date et présentez le résultat dans le format requis. Cette méthode est généralement plus efficace que LEFT JOIN, notamment sur de grands ensembles de données.

Les deux méthodes peuvent calculer la différence de date de lignes consécutives. La méthode à choisir dépend de votre système de base de données et de vos exigences de performances. La deuxième méthode (en utilisant LEAD) est généralement plus concise et efficace.

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