SQL Academy
Premium
Funktionsreferenz

LAG

Gibt den Wert aus der Zeile zurück, die offset Zeilen vor der aktuellen in der Fensterpartition liegt.

PostgreSQL 17.5
LAG(column[, offset[, default]]) OVER ([PARTITION BY ...] [ORDER BY ...])

Parameter

column
Spalte oder Ausdruck, dessen Wert aus der vorherigen Zeile genommen wird
offsetintegeroptional
Wie viele Zeilen zurück, standardmäßig 1; ein negativer Wert schaut nach vorn, wie LEAD
defaultoptional
Wert vom Typ von column, wenn es keine Zeile mit diesem Versatz gibt, standardmäßig NULL
PARTITION BYoptional
Spalten, nach denen die Zeilen in Partitionen aufgeteilt werden; der Versatz geht nicht über die Partition hinaus
ORDER BYoptional
Reihenfolge der Zeilen, die bestimmt, welche Zeile die vorherige ist

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

Eine und zwei Zeilen zurück

PostgreSQL 17.5
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

Zeit seit dem vorherigen Kauf

PostgreSQL 17.5
SELECT family_member,
	date,
	LAG(date) OVER (
		PARTITION BY family_member
		ORDER BY date
	) AS previous_date,
	date - LAG(date) OVER (
		PARTITION BY family_member
		ORDER BY date
	) AS since_previous
FROM Payments
ORDER BY family_member,
	date;
family_memberdateprevious_datesince_previous
12005-02-03<NULL><NULL>
12005-02-122005-02-039 days
12005-03-112005-02-1227 days
12005-04-202005-03-1140 days
12005-05-132005-04-2023 days
12005-06-052005-05-1323 days
12006-01-152005-06-05224 days
12006-03-122006-01-1556 days
22005-03-18<NULL><NULL>
22005-03-232005-03-185 days

Details

Die Differenz zur vorherigen Zeile ist column - LAG(column) OVER (...): Für die erste Zeile einer Partition ist sie NULL. default muss denselben Typ wie column haben.

Siehe auch

Wo du es lernst