SQL Academy
Premium
Funktionsreferenz

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;
member_namebirthdayprevious_membertwo_rows_back
Headley Quincey1960-05-13<NULL>none
Ernest Forrest1961-09-11Headley Quinceynone
Flavia Quincey1963-02-16Ernest ForrestHeadley Quincey
Constance Forrest1968-09-06Flavia QuinceyErnest Forrest
Andie Quincey1983-06-05Constance ForrestFlavia Quincey
Lela Quincey1985-06-07Andie QuinceyConstance Forrest
Annie Quincey1988-04-10Lela QuinceyAndie Quincey
Wednesday Addams2005-01-13Annie QuinceyLela Quincey

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;
family_memberdatedays_since_previous
12005-02-03<NULL>
12005-02-129
12005-03-1127
12005-04-2040
12005-05-1323
12005-06-0523
12006-01-15224
12006-03-1256
22005-03-18<NULL>
22005-03-235

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.

Siehe auch

Wo du es lernst