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

Comment calculer la différence de date entre des lignes consécutives dans SQL ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-08 08:36:40428parcourir

How to Calculate the Date Difference Between Consecutive Rows in SQL?

Détermination de l'intervalle de temps entre les enregistrements séquentiels en SQL

Ce tutoriel montre comment calculer la différence de date entre des lignes successives pour un numéro de compte donné dans une table SQL.

Méthode 1 : Approche de sous-requête

Cette requête calcule la différence de date à l'aide d'une sous-requête :

<code class="language-sql">SELECT  ID,
        AccountNumber,
        Date,
        NextDate,
        DATEDIFF(day, Date, NextDate) AS DateDifference
FROM    (   SELECT  ID, 
                    AccountNumber,
                    Date,
                    (   SELECT  MIN(Date) 
                        FROM    YourTable T2
                        WHERE   T2.AccountNumber = T1.AccountNumber
                        AND     T2.Date > T1.Date
                    ) AS NextDate
            FROM    YourTable T1
        ) AS T</code>

Explication :

La requête externe sélectionne l'ID, le AccountNumber, la Date, la NextDate calculée et la différence de date. La requête interne identifie la date suivante (NextDate) pour chaque ligne en recherchant la date minimale supérieure à la date de la ligne actuelle et appartenant au même compte. DATEDIFF(day, Date, NextDate) calcule la différence en jours.

Méthode 2 : Technique d'auto-adhésion

Une alternative plus efficace utilise une auto-jointure :

<code class="language-sql">SELECT  T1.ID, 
        T1.AccountNumber, 
        T1.Date, 
        MIN(T2.Date) AS NextDate, 
        DATEDIFF(day, T1.Date, MIN(T2.Date)) AS DateDifference
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>

Cette approche utilise un LEFT JOIN pour comparer chaque ligne avec les lignes suivantes ayant le même numéro de compte et une date ultérieure. MIN(T2.Date) trouve la date suivante et DATEDIFF(day, ...) calcule la différence en jours. Les lignes sans ligne suivante auront une valeur NULL pour NextDate et DateDifference. Notez que le premier argument de DATEDIFF spécifie l'unité de différence (ici, « jour »). Ajustez si nécessaire (par exemple, « mois », « année »).

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