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 ?
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!