Maison >base de données >tutoriel mysql >Comment calculer les différences de date entre des lignes consécutives pour un numéro de compte spécifique en SQL ?

Comment calculer les différences de date entre des lignes consécutives pour un numéro de compte spécifique en SQL ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-08 08:26:42479parcourir

How to Calculate Date Differences Between Consecutive Rows for a Specific Account Number in SQL?

Calculer efficacement les différences de date entre des lignes consécutives en SQL pour un compte spécifique

Cet article présente deux requêtes SQL pour calculer la différence de date entre des lignes consécutives pour un numéro de compte donné. Les méthodes présentées offrent différents degrés d'efficacité.

Méthode 1 : Utiliser un LEFT JOIN et un MIN()

Cette approche utilise un LEFT JOIN pour comparer chaque ligne avec les lignes suivantes pour le même compte. La fonction MIN() trouve la date suivante.

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

Cette requête joint la table (YourTable) à elle-même, en comparant chaque ligne (T1) avec toutes les lignes suivantes pour le même numéro de compte (T2). Le MIN(T2.Date) trouve la date ultérieure la plus ancienne et DATEDIFF calcule la différence en jours. Le regroupement garantit un résultat pour chaque ligne d'origine.

Méthode 2 : Utiliser une sous-requête pour une efficacité améliorée

Pour des ensembles de données plus volumineux, une approche de sous-requête s'avère souvent plus efficace. Cette méthode intègre directement le calcul de la date au sein de la requête principale.

<code class="language-sql">SELECT  ID,
        AccountNumber,
        Date,
        NextDate,
        DATEDIFF("D", Date, NextDate) AS DaysDiff
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>

Ici, une sous-requête est imbriquée pour trouver le NextDate pour chaque ligne. Cela évite le fonctionnement JOIN potentiellement moins efficace. La requête externe calcule ensuite le DaysDiff en utilisant DATEDIFF.

Les deux méthodes obtiennent le même résultat : calculer la différence de date entre des enregistrements consécutifs pour chaque numéro de compte. Cependant, pour des performances optimales avec les grandes tables, la Méthode 2 (utilisant la sous-requête) est généralement recommandée. Choisissez la méthode la mieux adaptée à votre volume de données et à votre système de base de données.

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