Можно фильтровать результаты window functions, таких как
ROW_NUMBER() или RANK(), напрямую — без дополнительного subquery или CTE.Вместо:
WITH ranked AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY user_id
ORDER BY timestamp DESC
) AS rn
FROM events
)
SELECT *
FROM ranked
WHERE rn = 1;
Можно написать:
SELECT *
FROM events
QUALIFY ROW_NUMBER() OVER (
PARTITION BY user_id
ORDER BY timestamp DESC
) = 1;
QUALIFY особенно удобен для deduplication, выбора последних записей и очистки данных. Он заметно уменьшает вложенность запросов и делает SQL проще для чтения. Только не забудьте проверить, поддерживает ли ваша СУБД QUALIFY.👉 @SQLPortal
