LAST_VALUE
Возвращает значение column из последней строки рамки окна.
LAST_VALUE(column)- column
- Столбец или выражение, значение которого нужно вернуть
Возвращаемое значение
Значение того же типа, что и column
Примеры
Самый младший в каждом статусе
SELECT member_name,
status,
birthday,
LAST_VALUE(member_name) OVER (
PARTITION BY status
ORDER BY birthday ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) AS youngest_in_status
FROM FamilyMembers;Рамка по умолчанию — до текущей строки
SELECT member_name,
status,
birthday,
LAST_VALUE(member_name) OVER (
PARTITION BY status
ORDER BY birthday
) AS last_in_frame
FROM FamilyMembers;Подробности
Рамка по умолчанию заканчивается текущей строкой (и строками с тем же значением ORDER BY), а не концом раздела, поэтому без своей рамки функция часто возвращает значение текущей строки. Чтобы получить последнее значение раздела, задайте рамку ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING.
Рамка задаёт, какие строки раздела видит функция, и пишется после ORDER BY: ROWS BETWEEN frame_start AND frame_end считает строки, а RANGE BETWEEN frame_start AND frame_end — значения ORDER BY.
Без рамки действует правило по умолчанию. Если в OVER есть ORDER BY, рамка идёт от начала раздела до текущей строки, включая строки с тем же значением ORDER BY. Если ORDER BY нет, рамка — весь раздел.