Berechnen von Unterschieden zwischen Zeilen in einer MySQL-SELECT-Anweisung
In diesem Szenario haben Sie eine MySQL-Tabelle mit Daten wie Kilometern, Datumsangaben, und Fahrzeuginformationen, jedoch möglicherweise nicht immer in chronologischer Reihenfolge. Ihr Ziel besteht darin, eine Ansicht zu erstellen, die eine zusätzliche Spalte enthält, die die Anzahl der Kilometer seit dem letzten Datum für jedes Auto anzeigt.
Um dies zu erreichen, können Sie sich nicht auf einen einfachen JOIN für die ID-Spalte verlassen, da die Daten vorhanden sind nicht chronologisch sortiert. Stattdessen müssen Sie einen LEFT JOIN und eine Unterabfrage verwenden, um das maximale Datum zu bestimmen, das für jede Zeile vor dem aktuellen Datum liegt.
Verwendung eines LEFT JOIN und einer Unterabfrage
Die folgende Abfrage verwendet einen LEFT JOIN, um die aktuelle Tabellenzeile (mt1) mit einer Zeile (mt2) zu verbinden, deren maximales Datum vor dem Datum von mt1 liegt:
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
Diese Abfrage berechnet die Differenz zwischen den Kilometern der aktuellen Zeile (mt1) und die Kilometer der Zeile mit dem maximalen Datum vor dem aktuellen Datum (mt2). Wenn mt2 NULL ist, bedeutet das, dass es keine vorherige Zeile gibt, also ist die Differenz 0.
Alternative Methode mit MySQL Hackery
Als Alternative können Sie a verwenden MySQL-Hack zur Emulation der lag()-Funktion, die in MySQL nicht nativ unterstützt wird:
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
Diese Abfrage verwendet eine benutzerdefinierte Variable (@kilo), um den vorherigen Kilometerwert zu verfolgen. Die Differenz zwischen dem aktuellen Kilometerwert und @kilo ergibt die Anzahl der Kilometer seit dem letzten Datum. Die @kilo-Variable wird nach der Verarbeitung jeder Zeile mit dem aktuellen Kilometerwert aktualisiert.
Das obige ist der detaillierte Inhalt vonWie berechnet man Kilometerunterschiede zwischen Zeilen in einer MySQL-Tabelle?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!