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

LAST_VALUE

Возвращает значение column из последней строки рамки окна.

PostgreSQL 17.5
LAST_VALUE(column) OVER ([PARTITION BY ...] [ORDER BY ...] [frame])

Параметры

column
Столбец или выражение, значение которого нужно вернуть
PARTITION BYнеобязательный
Столбцы, по которым строки делятся на разделы
ORDER BYнеобязательный
Порядок строк в разделе, определяющий, какая строка последняя
frameключевое словонеобязательный
Рамка окна: ROWS, RANGE или GROUPS BETWEEN начало AND конец; по умолчанию с ORDER BY — от начала раздела до текущей строки вместе с равными ей по ORDER BY, без ORDER BY — весь раздел; весь раздел явно — ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING

Возвращаемое значение

Значение того же типа, что и column

Примеры

Самый младший в каждом статусе

PostgreSQL 17.5
SELECT member_name,
	status,
	birthday,
	LAST_VALUE(member_name) OVER (
		PARTITION BY status
		ORDER BY birthday ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
	) AS youngest_in_status
FROM FamilyMembers;
member_namestatusbirthdayyoungest_in_status
Lela Quinceydaughter1985-06-07Wednesday Addams
Annie Quinceydaughter1988-04-10Wednesday Addams
Wednesday Addamsdaughter2005-01-13Wednesday Addams
Headley Quinceyfather1960-05-13Ernest Forrest
Ernest Forrestfather1961-09-11Ernest Forrest
Flavia Quinceymother1963-02-16Constance Forrest
Constance Forrestmother1968-09-06Constance Forrest
Andie Quinceyson1983-06-05Andie Quincey

Рамка по умолчанию — до текущей строки

PostgreSQL 17.5
SELECT member_name,
	status,
	birthday,
	LAST_VALUE(member_name) OVER (
		PARTITION BY status
		ORDER BY birthday
	) AS last_in_frame
FROM FamilyMembers;
member_namestatusbirthdaylast_in_frame
Lela Quinceydaughter1985-06-07Lela Quincey
Annie Quinceydaughter1988-04-10Annie Quincey
Wednesday Addamsdaughter2005-01-13Wednesday Addams
Headley Quinceyfather1960-05-13Headley Quincey
Ernest Forrestfather1961-09-11Ernest Forrest
Flavia Quinceymother1963-02-16Flavia Quincey
Constance Forrestmother1968-09-06Constance Forrest
Andie Quinceyson1983-06-05Andie Quincey

Подробности

С ORDER BY рамка по умолчанию заканчивается текущей строкой (и строками с тем же значением ORDER BY), а не концом раздела, поэтому без явной рамки функция часто возвращает значение текущей строки. Как задать рамку, описано в ROWS BETWEEN.

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

Где изучить