LAG
Gibt den Wert aus der Zeile zurück, die offset Zeilen vor der aktuellen in der Fensterpartition liegt.
MySQL 8.1
LAG(column[, offset[, default]]) OVER ([PARTITION BY ...] [ORDER BY ...])Parameter
- column
- Spalte oder Ausdruck, dessen Wert aus der vorherigen Zeile genommen wird
- offsetINToptional
- Wie viele Zeilen zurück, nichtnegative ganze Zahl, standardmäßig 1
- defaultoptional
- Wert, wenn es keine Zeile mit diesem Versatz gibt, standardmäßig NULL
- PARTITION BYoptional
- Spalten, nach denen die Zeilen in Partitionen aufgeteilt werden; der Versatz überschreitet die Grenzen der Partition nicht
- ORDER BYoptional
- Reihenfolge der Zeilen, die bestimmt, welche Zeile die vorherige ist; ohne sie ist die Reihenfolge nicht festgelegt
Rückgabewert
Wert vom Typ von column; default oder NULL, wenn es keine Zeile mit diesem Versatz gibt, zum Beispiel bei der ersten Zeile einer Partition
Beispiele
Versatz um eine und zwei Zeilen zurück
MySQL 8.1
SELECT member_name,
birthday,
LAG(member_name) OVER (
ORDER BY birthday
) AS previous_member,
LAG(member_name, 2, 'none') OVER (
ORDER BY birthday
) AS two_rows_back
FROM FamilyMembers;Tage seit der vorherigen Zahlung jedes Familienmitglieds
MySQL 8.1
SELECT family_member,
date,
DATEDIFF(
date,
LAG(date) OVER (
PARTITION BY family_member
ORDER BY date
)
) AS days_since_previous
FROM Payments;Details
Eine typische Aufgabe ist, eine Zeile mit der vorherigen zu vergleichen: Die Differenz x - LAG(x) OVER (...) oder DATEDIFF(date, LAG(date) OVER (...)) zeigt die Änderung seit der vorherigen Zeile. default wird nur eingesetzt, wenn es keine Zeile mit diesem Versatz gibt; gibt es sie, aber sie enthält NULL, ist das Ergebnis NULL.