Wypróbuj:
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
Skrzypce:
http://sqlfiddle.com/#!6/f674a7/4/0
Zastąp „avg(dailusage) over...” sumą (zamiast średniej), jeśli tak naprawdę chcesz otrzymać sumę z ostatniego tygodnia. W swoim tytule mówisz, że chcesz średniej, ale później mówisz, że chcesz sumę. Zapytanie powinno być takie samo, poza tym, więc użyj tego, czego naprawdę chcesz.
Jak zauważył Gordon, jest to w zasadzie średnia z ostatnich 6 dat, w których produkt był używany, co może oznaczać więcej niż tylko ostatnie 6 dni, jeśli w tabeli są dni bez wierszy dla tego produktu, ponieważ nie był w ogóle używane. Aby obejść ten problem, możesz użyć tabeli dat i tabeli produktów.