Heim >Datenbank >MySQL-Tutorial >Wie berechnet man die Datumsdifferenz zwischen aufeinanderfolgenden Zeilen in SQL?

Wie berechnet man die Datumsdifferenz zwischen aufeinanderfolgenden Zeilen in SQL?

Linda Hamilton
Linda HamiltonOriginal
2025-01-08 08:36:40393Durchsuche

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

Bestimmen der Zeitlücke zwischen aufeinanderfolgenden Datensätzen in SQL

Dieses Tutorial zeigt, wie Sie die Datumsdifferenz zwischen aufeinanderfolgenden Zeilen für eine bestimmte Kontonummer in einer SQL-Tabelle berechnen.

Methode 1: Unterabfrageansatz

Diese Abfrage berechnet die Datumsdifferenz mithilfe einer Unterabfrage:

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

Erklärung:

Die äußere Abfrage wählt die ID, die Kontonummer, das Datum, das berechnete nächste Datum und die Datumsdifferenz aus. Die innere Abfrage identifiziert das nächste Datum (NextDate) für jede Zeile, indem sie das Mindestdatum findet, das größer als das Datum der aktuellen Zeile ist und zum selben Konto gehört. DATEDIFF(day, Date, NextDate) berechnet die Differenz in Tagen.

Methode 2: Self-Join-Technik

Eine effizientere Alternative nutzt einen Self-Join:

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

Bei diesem Ansatz wird ein LEFT JOIN verwendet, um jede Zeile mit nachfolgenden Zeilen zu vergleichen, die dieselbe Kontonummer und ein späteres Datum haben. MIN(T2.Date) findet das nächste Datum und DATEDIFF(day, ...) berechnet die Differenz in Tagen. Zeilen ohne folgende Zeile haben einen NULL-Wert für NextDate und DateDifference. Beachten Sie, dass das erste Argument von DATEDIFF die Einheit der Differenz angibt (hier „Tag“). Passen Sie es nach Bedarf an (z. B. „Monat“, „Jahr“).

Das obige ist der detaillierte Inhalt vonWie berechnet man die Datumsdifferenz zwischen aufeinanderfolgenden Zeilen in SQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn