Heim >Datenbank >MySQL-Tutorial >Wie berechnet man die Differenz zwischen Werten in aufeinanderfolgenden Zeilen in MySQL?

Wie berechnet man die Differenz zwischen Werten in aufeinanderfolgenden Zeilen in MySQL?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-07 04:18:02542Durchsuche

How to Calculate the Difference Between Values in Consecutive Rows in MySQL?

Abrufen von Spaltenunterschieden in einer MySQL-SELECT-Anweisung

In MySQL erfordert das Ermitteln der Differenz zwischen Werten in zwei Zeilen einer SELECT-Anweisung die Verwendung geeigneter SELECT- und JOIN-Techniken. Lassen Sie uns dieses Problem untersuchen und die verfügbaren Lösungen erkunden.

Die bereitgestellte Tabelle enthält Zeilen, die nach ID, Kilometern, Datum, Auto-ID, Autofahrer usw. organisiert sind. Um die Tabelle richtig zu sortieren, ist eine SELECT-Anweisung mit einem ORDER BY erforderlich Die Klausel wird verwendet, was zu einer sortierten Tabelle führt.

Als nächstes besteht das Ziel darin, eine Ansicht zu erstellen, die eine zusätzliche Spalte „number_km_since_last_date“ enthält, die die Anzahl der Kilometer seit dem letzten aufgezeichneten Datum angibt. Ein Ansatz verwendet einen INNER JOIN, stößt jedoch aufgrund unsortierter Zeilen auf Herausforderungen.

Verwendung von LEFT JOIN und Unterabfrage:

Eine effektivere Methode ist die kombinierte Verwendung eines LEFT JOIN mit einer Unterabfrage. Die Unterabfrage wählt das maximale Datum aus, das kleiner ist als das Datum der aktuellen Zeile aus derselben Tabelle. Durch Verbinden der aktuellen Zeile mit der maximalen vorherigen Zeile kann die Differenz in Kilometern mithilfe des Ausdrucks „mt1.Kilometers – IFNULL(mt2.Kilometers, 0)“ berechnet werden. Die resultierende SQL-Abfrage lautet:

SELECT
    mt1.ID,
    mt1.Kilometers,
    mt1.date,
    mt1.Kilometers - IFNULL(mt2.Kilometers, 0) AS number_km_since_last_date   
FROM
    myTable mt1
    LEFT JOIN myTable mt2
        ON mt2.Date = (
            SELECT MAX(Date)
            FROM myTable mt3
            WHERE mt3.Date < mt1.Date
        )
ORDER BY mt1.date

Emulieren der LAG()-Funktion mit MySQL-Hack:

Eine andere Technik nutzt die Emulation der lag()-Funktion, die nicht nativ ist wird in MySQL unterstützt. Eine benutzerdefinierte Variable, @kilo, wird auf Null initialisiert. Während jede Zeile in der Abfrage verarbeitet wird, werden ihre Kilometer vom aktuellen Wert von @kilo abgezogen und @kilo dann auf die aktuellen Kilometer aktualisiert. Dies liefert effektiv die Differenz in Kilometern seit der vorherigen Zeile. Die resultierende Abfrage lautet:

SET @kilo=0;

SELECT
    mt1.ID,
    mt1.Kilometers - @kilo AS number_km_since_last_date,
    @kilo := mt1.Kilometers Kilometers,
    mt1.date
FROM myTable mt1
ORDER BY mt1.date

Das obige ist der detaillierte Inhalt vonWie berechnet man die Differenz zwischen Werten in aufeinanderfolgenden Zeilen in MySQL?. 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