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;Разница с первой покупкой
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;Подробности
Рамка по умолчанию всегда начинается с первой строки раздела, поэтому без явной рамки функция возвращает первое значение раздела. Как задать другую рамку, описано в ROWS BETWEEN.