Ответ
В SQL (используя оконные функции OVER()) я применяю следующие основные типы окон для агрегации данных:
-
Скользящее окно (Moving/Rolling Window): Окно фиксированного размера, которое «скользит» по строкам. Например, скользящее среднее за последние 7 дней.
SELECT date, revenue, AVG(revenue) OVER (ORDER BY date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW) AS avg_7day_revenue FROM daily_sales; -
Накопительное окно (Cumulative/Running Window): Окно от начала отсчета до текущей строки. Например, нарастающий итог.
SELECT date, revenue, SUM(revenue) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_sum FROM daily_sales; -
Окно по разбиению (Partitioned Window): Данные сначала разбиваются на группы (партиции), а затем внутри каждой группы применяется оконная функция. Например, ранжирование продаж внутри каждого отдела.
SELECT department, employee, sales, RANK() OVER (PARTITION BY department ORDER BY sales DESC) AS rank_in_dept FROM employee_sales; -
Окно по диапазону (Range Window): Определяется на основе значений столбца, а не количества строк. Например, агрегация за последние 30 дней по дате.
SELECT date, revenue, SUM(revenue) OVER (ORDER BY date RANGE BETWEEN INTERVAL '30' DAY PRECEDING AND CURRENT ROW) AS sum_last_30d FROM daily_sales;
Выбор типа окна зависит от конкретной аналитической задачи: анализ трендов (скользящее), расчет итогов (накопительное) или сравнение внутри групп (партиционирование).