Zkuste:
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
Husla:
http://sqlfiddle.com/#!6/f674a7/4/0
Nahraďte "avg(dailusage) over......" součtem (spíše než avg), pokud to, co opravdu chcete, je součet za minulý týden. V názvu říkáte, že chcete průměr, ale později řeknete, že chcete součet. Dotaz by měl být stejný než to, takže použijte, co skutečně chcete.
Jak zdůraznil Gordon, jedná se v podstatě o průměr posledních 6 dat, kdy byl produkt používán, což může být více než jen posledních 6 dní, pokud jsou v tabulce dny bez řádků pro daný produkt, protože nebyl nepoužívat vůbec. Chcete-li to obejít, můžete použít tabulku data a tabulku vašich produktů.