Cóż, fakt, że musisz obliczyć średnią dla każdego godzinę, faktycznie to ułatwia, ponieważ wystarczy SUM
liczbę produktów i podziel ją przez stałą liczbę (24). Myślę więc, że przyniesie to pożądane wyniki (chociaż w tym konkretnym przypadku kursor będzie faktycznie szybszy):
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