Nah, fakta bahwa Anda perlu menghitung rata-rata untuk setiap jam, sebenarnya membuat ini lebih sederhana, karena Anda hanya perlu SUM
jumlah produk dan membaginya dengan nomor tetap (24). Jadi saya pikir ini akan mendapatkan hasil yang Anda inginkan (meskipun dalam kasus khusus ini, kursor sebenarnya lebih cepat):
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