Справочник по функциям

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;
member_namebirthdaynext_membertwo_rows_ahead
Headley Quincey1960-05-13Ernest ForrestFlavia Quincey
Ernest Forrest1961-09-11Flavia QuinceyConstance Forrest
Flavia Quincey1963-02-16Constance ForrestAndie Quincey
Constance Forrest1968-09-06Andie QuinceyLela Quincey
Andie Quincey1983-06-05Lela QuinceyAnnie Quincey
Lela Quincey1985-06-07Annie QuinceyWednesday Addams
Annie Quincey1988-04-10Wednesday Addamsnone
Wednesday Addams2005-01-13<NULL>none

Сколько осталось до следующей покупки

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;
family_memberdatenext_dateuntil_next
12005-02-032005-02-129 days
12005-02-122005-03-1127 days
12005-03-112005-04-2040 days
12005-04-202005-05-1323 days
12005-05-132005-06-0523 days
12005-06-052006-01-15224 days
12006-01-152006-03-1256 days
12006-03-12<NULL><NULL>
22005-03-182005-03-235 days
22005-03-232005-06-1180 days

Подробности

Разницу со следующей строкой считают как LEAD(column) OVER (...) - column: у последней строки раздела она равна NULL. Значение default должно быть того же типа, что и column.

Смотрите также

Где изучить