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