Hãy thử:
select x.*,
avg(dailyusage) over(partition by productid order by productid, date rows between 6 preceding and current row) as rolling_avg
from (select productid, date, sum(usagecount) as dailyusage
from tbl
group by productid, date) x
Chơi đùa:
http://sqlfiddle.com/#!6/f674a7/4/0
Thay thế "avg (dailusage) over ...." bằng sum (thay vì avg) nếu những gì bạn thực sự muốn là tổng cho tuần qua. Trong tiêu đề của bạn, bạn nói rằng bạn muốn trung bình nhưng sau đó bạn nói rằng bạn muốn tổng. Truy vấn phải giống với truy vấn khác, vì vậy hãy sử dụng bất kỳ truy vấn nào bạn thực sự muốn.
Như đã được Gordon chỉ ra, đây về cơ bản là giá trị trung bình của 6 ngày đã sử dụng sản phẩm trước đây, có thể nhiều hơn chỉ 6 ngày qua nếu có những ngày không có bất kỳ hàng nào cho sản phẩm đó trên bảng vì nó không được sử dụng t được sử dụng ở tất cả. Để giải quyết vấn đề đó, bạn có thể sử dụng bảng ngày tháng và bảng sản phẩm của mình.