Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment calculer la moyenne mobile sur les n dernières heures

Eh bien, le fait que vous deviez calculer la moyenne de chaque heure, rend en fait cela plus simple, puisque vous avez juste besoin de SUM le produit compte et le divise par un nombre fixe (24). Je pense donc que cela obtiendra les résultats souhaités (bien que dans ce cas particulier, un curseur soit en fait plus rapide):

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