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!