У меня есть таблица ежечасного использования продукта (сколько раз продукт используется) -
ID (bigint)| ProductId (tinyint)| Date (int - YYYYMMDD) | Hour (tinyint)| UsageCount (int)
#|1 | 20140901 | 0 | 10
#|1 | 20140901 | 1 | 15
#|1 | 20140902 | 5 | 25
#|1 | 20140903 | 5 | 25
#|1 | 20140904 | 3 | 25
#|1 | 20140905 | 7 | 25
#|1 | 20140906 | 10 | 25
#|1 | 20140907 | 9 | 25
#|1 | 20140908 | 5 | 25
#|2 | 20140903 | 16 | 10
#|2 | 20140903 | 13 | 115
Аналогично, у меня есть данные об использовании для 4 разных продуктов (ProductId от 1 до 4), хранящихся в течение каждого часа в таблице product_usage. Как вы можете себе представить, он постоянно растет, поскольку ночной процесс ETL выгружает данные за весь предыдущий день. Если продукт не используется в любой час дня, запись в этот час не будет отображаться в этой таблице. Аналогичным образом, если продукт не используется в течение всего дня, в таблице не будет записи за этот день в таблице. Мне нужно создать отчет, который дает ежедневное использование и последние 7 дней скользящего среднего -
Например:
ProductId | Date | DailyUsage | RollingAverage
1 | 20140901 | sum of usages of that day | (Sum of usages from 20140901 through 20140826) / 7
1 | 20140901 | sum of usages of that day | (Sum of usages from 20140901 through 20140826) / 7
1 | 20140902 | sum of usages of that day | (Sum of usages from 20140902 through 20140827) / 7
2 | 20140902 | sum of usages of that day | (Sum of usages from 20140902 through 20140827) / 7
И так далее.. Я планирую создать индексированный просмотр на SQL-сервере 2014. Можете ли вы подумать об эффективном запросе SQL для этого?