Оконные функции SQL
Коротко: Оконные функции вычисляют по группе связанных строк, не сворачивая строки в одну. Так каждая строка получает, например, свой ранг или нарастающий итог.
Подробнее: В отличие от GROUP BY, который даёт одну строку на группу, оконные функции сохраняют все строки. «Окно» задаётся через OVER (...).
Подробности
- Структура:
функция() OVER (PARTITION BY столбец ORDER BY столбец).PARTITION BYделит на группы,ORDER BYупорядочивает внутри. - Ранжирование:
ROW_NUMBER()(сквозной),RANK()(пропуски при равенстве),DENSE_RANK()(без пропусков). - Соседи:
LAG(столбец)иLEAD(столбец)берут значение предыдущей или следующей строки, например для изменений по сравнению с прошлым месяцем. - Нарастающие итоги:
SUM(сумма) OVER (ORDER BY дата). СROWS BETWEEN 2 PRECEDING AND CURRENT ROWполучается скользящее среднее. - Типичная задача: Самая новая строка по каждому клиенту:
ROW_NUMBER() OVER (PARTITION BY клиент ORDER BY дата DESC)и затем фильтр= 1. - Примечание: Оконные функции нельзя использовать в
WHERE. Для этого применяйте подзапрос или CTE.
См. также: SQL