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

NTH_VALUE

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

PostgreSQL 17.5
NTH_VALUE(column, n) OVER ([PARTITION BY ...] [ORDER BY ...] [frame])

Параметры

column
Столбец или выражение, значение которого нужно вернуть
ninteger
Номер строки в рамке, начиная с 1
PARTITION BYнеобязательный
Столбцы, по которым строки делятся на разделы
ORDER BYнеобязательный
Порядок строк в разделе
frameключевое словонеобязательный
Рамка окна, по умолчанию с ORDER BY — от начала раздела до текущей строки

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

Значение того же типа, что и column; NULL, если в рамке меньше n строк

Примеры

Второй по старшинству — рамка по умолчанию

PostgreSQL 17.5
SELECT member_name,
	birthday,
	NTH_VALUE(member_name, 2) OVER (
		ORDER BY birthday
	) AS second_oldest
FROM FamilyMembers;
member_namebirthdaysecond_oldest
Headley Quincey1960-05-13<NULL>
Ernest Forrest1961-09-11Ernest Forrest
Flavia Quincey1963-02-16Ernest Forrest
Constance Forrest1968-09-06Ernest Forrest
Andie Quincey1983-06-05Ernest Forrest
Lela Quincey1985-06-07Ernest Forrest
Annie Quincey1988-04-10Ernest Forrest
Wednesday Addams2005-01-13Ernest Forrest

Второй по старшинству во всём разделе

PostgreSQL 17.5
SELECT member_name,
	birthday,
	NTH_VALUE(member_name, 2) OVER (
		ORDER BY birthday ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
	) AS second_oldest
FROM FamilyMembers;
member_namebirthdaysecond_oldest
Headley Quincey1960-05-13Ernest Forrest
Ernest Forrest1961-09-11Ernest Forrest
Flavia Quincey1963-02-16Ernest Forrest
Constance Forrest1968-09-06Ernest Forrest
Andie Quincey1983-06-05Ernest Forrest
Lela Quincey1985-06-07Ernest Forrest
Annie Quincey1988-04-10Ernest Forrest
Wednesday Addams2005-01-13Ernest Forrest

Подробности

С рамкой по умолчанию первые n − 1 строк раздела получают NULL: n-я строка ещё не попала в их рамку. Чтобы у всех строк было одно значение, задайте рамку на весь раздел — ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.

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