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;Второй по старшинству во всём разделе
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;Подробности
С рамкой по умолчанию первые n − 1 строк раздела получают NULL: n-я строка ещё не попала в их рамку. Чтобы у всех строк было одно значение, задайте рамку на весь раздел — ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.