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;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;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.