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

FIRST_VALUE

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

PostgreSQL 17.5
FIRST_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 — весь раздел

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

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

Примеры

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

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

Разница с первой покупкой

PostgreSQL 17.5
SELECT family_member,
	date,
	unit_price,
	unit_price - FIRST_VALUE(unit_price) OVER (
		PARTITION BY family_member
		ORDER BY date
	) AS diff_from_first
FROM Payments
ORDER BY family_member,
	date;
family_memberdateunit_pricediff_from_first
12005-02-0380
12005-02-1220001992
12005-03-117-1
12005-04-2080
12005-05-137-1
12005-06-05300292
12006-01-15100009992
12006-03-12102
22005-03-1880
22005-03-2321002092

Подробности

Рамка по умолчанию всегда начинается с первой строки раздела, поэтому без явной рамки функция возвращает первое значение раздела. Как задать другую рамку, описано в ROWS BETWEEN.

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

Где изучить