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

NTH_VALUE

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

PostgreSQL 17.9
NTH_VALUE(column, n)
column
Столбец или выражение, значение которого нужно вернуть
n
Номер строки в рамке, начиная с 1
integer

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

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

Примеры

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

PostgreSQL 17.9
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.9
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

Подробности

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

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