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!