LEAD
Возвращает значение из строки, которая стоит на offset строк позже текущей в разделе окна.
PostgreSQL 17.5
LEAD(column[, offset[, default]]) OVER ([PARTITION BY ...] [ORDER BY ...])Параметры
- column
- Столбец или выражение, значение которого берётся из следующей строки
- offsetintegerнеобязательный
- На сколько строк вперёд смотреть, по умолчанию 1; отрицательное значение смотрит назад, как LAG
- defaultнеобязательный
- Значение того же типа, что и column, если строки со смещением нет, по умолчанию NULL
- PARTITION BYнеобязательный
- Столбцы, по которым строки делятся на разделы, смещение не выходит за границы раздела
- ORDER BYнеобязательный
- Порядок строк, определяющий, какая строка следующая
Возвращаемое значение
Значение того же типа, что и column; default или NULL, если строки со смещением нет, например у последней строки раздела
Примеры
Сдвиг на одну и две строки вперёд
PostgreSQL 17.5
SELECT member_name,
birthday,
LEAD(member_name) OVER (
ORDER BY birthday
) AS next_member,
LEAD(member_name, 2, 'none') OVER (
ORDER BY birthday
) AS two_rows_ahead
FROM FamilyMembers;Сколько осталось до следующей покупки
PostgreSQL 17.5
SELECT family_member,
date,
LEAD(date) OVER (
PARTITION BY family_member
ORDER BY date
) AS next_date,
LEAD(date) OVER (
PARTITION BY family_member
ORDER BY date
) - date AS until_next
FROM Payments
ORDER BY family_member,
date;Подробности
Разницу со следующей строкой считают как LEAD(column) OVER (...) - column: у последней строки раздела она равна NULL. Значение default должно быть того же типа, что и column.