SQL-запрос для 7-дневного скользящего среднего в SQL Server
У меня есть таблица почасового использования продукта (сколько раз продукт используется) данные -
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 Server 2014. Можете ли вы придумать эффективный запрос SQL для этого?