Consulta SQL para el promedio móvil de 7 días en SQL Server
Tengo una tabla de datos de uso de producto por hora (cuántas veces se usa el producto):
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
Del mismo modo, tengo los datos de uso de 4 productos diferentes (ProductId de 1 a 4) almacenados por cada hora en la tabla product_usage. Como puede imaginar, está en constante crecimiento a medida que el proceso nocturno de ETL vuelca los datos de todo el día anterior. Si un producto no se utiliza en ninguna hora del día, el registro de esa hora no aparecerá en esta tabla. Del mismo modo, si un producto no se usa durante todo el día, no habrá ningún registro para ese día en la tabla. Necesito generar un informe que proporcione el uso diario y el promedio móvil de los últimos 7 días.
Por ejemplo:
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
Y así sucesivamente. Estoy planeando crear una Vista indexada en el servidor SQL 2014. ¿Se le ocurre una consulta SQL eficiente para hacer esto?