Агрегация скользящих окон 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 дня.

Другие вопросы по тегам