sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo calcular la media móvil de las últimas n horas

Bueno, el hecho de que necesites calcular el promedio para cada hora, en realidad lo hace más simple, ya que solo necesita SUM el producto cuenta y lo divide por un número fijo (24). Así que creo que esto obtendrá los resultados que desea (aunque en este caso particular, un cursor será más rápido):

SELECT A.*, B.ProductCount/24 DailyMovingAverage
FROM ProductInventory A
OUTER APPLY (   SELECT SUM(ProductCount) ProductCount
                FROM ProductInventory
                WHERE ProductName = A.ProductName 
                AND [Date] BETWEEN DATEADD(HOUR,-23,A.[Date]) AND A.[Date]) B