Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So berechnen Sie den gleitenden Durchschnitt der letzten n Stunden

Nun, die Tatsache, dass Sie den Durchschnitt für jeden berechnen müssen Stunde, macht dies tatsächlich einfacher, da Sie nur SUM müssen die Produktanzahl und teilen Sie sie durch eine feste Zahl (24). Ich denke also, dass dies die gewünschten Ergebnisse liefert (obwohl in diesem speziellen Fall ein Cursor tatsächlich schneller ist):

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