Bueno, el hecho de que necesites calcular el promedio para cada hora, en realidad lo hace más simple, ya que solo necesita SUM
el producto cuenta y lo divide por un número fijo (24). Así que creo que esto obtendrá los resultados que desea (aunque en este caso particular, un cursor será más rápido):
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