Consulta SQL para média rolante de 7 dias no SQL Server
Eu tenho uma tabela de dados de uso por hora do produto (quantas vezes o produto é usado) -
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
Da mesma forma, tenho os dados de uso de 4 produtos diferentes (ProductId de 1 a 4) armazenados a cada hora na tabela product_usage. Como você pode imaginar, está crescendo constantemente à medida que o processo noturno de ETL despeja os dados de todo o dia anterior. Se um produto não for usado em qualquer hora do dia, o registro dessa hora não aparecerá nesta tabela. Da mesma forma, se um produto não for usado durante todo o dia, não haverá registro para esse dia na tabela. Preciso gerar um relatório que forneça uso diário e média rolante dos últimos sete dias -
Por exemplo:
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
E assim por diante .. Estou planejando criar uma exibição indexada no SQL server 2014. Você consegue pensar em uma consulta SQL eficiente para fazer isso?