Агрегация скользящих окон SQL (без использования оконной функции)
Я ищу запрос, который может агрегировать данные за 21 день назад следующим образом: в моей таблице есть следующие столбцы: accountid, date, measure
Для каждого аккаунта мне нужна дата суммирования (измерения) за предыдущие 21 день назад. Любая идея, как сделать это в чистом SQL без оконной / аналитической функции? (Я пишу SQL внутри продукта BI, который не поддерживает аналитические функции)
1 ответ
Решение
Довольно неэффективный метод использует коррелированные подзапросы. Если вы хотите для каждой записи предыдущие 21 день, то:
select t.*,
(select sum(t2.measure)
from t t2
where t2.accountid = t.accountid and
t2.date > t.date - interval '21' day
) as sum21
from t;
Не то чтобы функции даты отличались в зависимости от базы данных, поэтому в вашей конкретной базе данных может быть другой метод вычитания 21 дня.