Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come calcolare la media mobile delle ultime n ore

Bene, il fatto che devi calcolare la media per ogni ora, in realtà lo rende più semplice, dal momento che devi solo SUM contare il prodotto e dividerlo per un numero fisso (24). Quindi penso che questo otterrà i risultati desiderati (anche se in questo caso particolare, un cursore sarà effettivamente più veloce):

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