Berechnen der Differenz in Zeilen einer MySQL-SELECT-Anweisung
In MySQL kann die Berechnung der Differenz zwischen Zeilen einer SELECT-Anweisung erfolgen durch verschiedene Methoden. Ein gängiger Ansatz ist die Verwendung eines Selbst-Joins, der es Ihnen ermöglicht, Zeilen innerhalb derselben Tabelle zu vergleichen. Stellen Sie sich das folgende Szenario vor:
Problemstellung:
Sie verfügen über eine Tabelle mit Daten zu Fahrzeugen, einschließlich Kilometer, Datum, Fahrzeug-ID und Fahrer. Aufgrund unterschiedlicher Dateneingabereihenfolgen können die Daten jedoch unsortiert sein. Sie möchten eine Ansicht erstellen, die die Anzahl der gefahrenen Kilometer seit der letzten Eingabe für jede Auto-Fahrer-Kombination anzeigt, was zu folgendem Format führt:
ID | Kilometers | date | car_id | car_driver | number_km_since_last_date 1 | 100 | 2012-05-04 | 1 | 1 | 0 2 | 200 | 2012-05-08 | 1 | 1 | 100 4 | 600 | 2012-05-16 | 1 | 1 | 400 3 | 1000 | 2012-05-25 | 1 | 1 | 400
Lösung 1: Mit Unterabfrage verbinden
Sie können eine Unterabfrage innerhalb eines INNER JOIN verwenden, um die Kilometer der vorherigen Zeile für jeden Datensatz abzurufen:
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
In dieser Abfrage wählt eine Unterabfrage das maximale Datum vor dem Datum der aktuellen Zeile aus , und dieses maximale Datum wird dann mit einem Datensatz im LEFT JOIN abgeglichen.
Lösung 2: Emulieren der Verzögerungsfunktion
MySQL bietet keine integrierte Verzögerung( )-Funktion, aber Sie können ihr Verhalten durch eine benutzerdefinierte Variable nachahmen:
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
In dieser Abfrage speichert die benutzerdefinierte Variable @kilo die Kilometer der vorherigen Zeile. Bei jeder Iteration wird die benutzerdefinierte Variable aktualisiert, wodurch die Änderung in Kilometern effektiv verfolgt wird.
Das obige ist der detaillierte Inhalt vonWie berechnet man den Unterschied in den Zeilen einer MySQL SELECT-Anweisung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!