Heim  >  Artikel  >  Datenbank  >  Wie berechnet man den Unterschied zwischen Zeilen in einer MySQL-SELECT-Anweisung?

Wie berechnet man den Unterschied zwischen Zeilen in einer MySQL-SELECT-Anweisung?

DDD
DDDOriginal
2024-11-07 09:32:03778Durchsuche

How to Calculate the Difference Between Rows in a MySQL SELECT Statement?

Berechnen von Unterschieden zwischen Zeilen in einer MySQL-SELECT-Anweisung

Problem:

So bestimmen Sie der Unterschied in den Werten zwischen zwei aufeinanderfolgenden Zeilen in einer MySQL-SELECT-Anweisung? Die bereitgestellte Tabelle enthält Daten wie Kilometer, Datum und Fahrzeugidentifikation. Ziel ist es, eine Ansicht zu erstellen, die eine zusätzliche Spalte enthält, die die Anzahl der Kilometer seit dem vorherigen Datum angibt.

Lösung:

Um dies zu erreichen, ist eine Kombination aus LINKS JOIN und Unterabfrage werden verwendet. Mit LEFT JOIN können wir Daten aus der Tabelle „myTable“ abrufen, während die Unterabfrage sicherstellt, dass der Vergleich mit der aktuellsten Zeile erfolgt, deren Datum vor der aktuellen Zeile liegt. Dieser Ansatz erzeugt effektiv den gewünschten Unterschied in Kilometern:

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

Alternative Lösung:

Eine andere Methode beinhaltet die Emulation der lag()-Funktion mithilfe von MySQL-Hackiness:

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

Ergebnisse:

Beide Methoden berechnen erfolgreich die Kilometerdifferenz zwischen aufeinanderfolgenden Zeilen in der sortierten Tabelle, was zu einer Ansicht führt, die die gewünschten zusätzlichen Informationen liefert.

Das obige ist der detaillierte Inhalt vonWie berechnet man den Unterschied zwischen Zeilen in einer MySQL-SELECT-Anweisung?. 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