Е, фактът, че трябва да изчислите средната стойност за всеки час, всъщност прави това по-лесно, тъй като просто трябва да SUM
пребройте продукта и го разделете на фиксирано число (24). Така че мисля, че това ще доведе до желаните от вас резултати (въпреки че в този конкретен случай курсорът от всъщност е по-бърз):
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