試してみてください:
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
フィドル:
http://sqlfiddle.com/#!6/f674a7/4/0
本当に必要なのが過去1週間の合計である場合は、「avg(dailusage)over ....」を(平均ではなく)合計に置き換えます。タイトルでは、平均が必要だと言いますが、後で合計が必要だと言います。クエリはそれ以外は同じである必要があるため、実際に必要なものを使用してください。
Gordonが指摘したように、これは基本的に、製品が使用された過去6日間の平均であり、テーブルにその製品の行がなかったために行がない日がある場合は、過去6日間よりも長くなる可能性があります。まったく使用されていません。これを回避するには、日付テーブルと商品テーブルを使用できます。