Prøv:
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
Violin:
http://sqlfiddle.com/#!6/f674a7/4/0
Erstat "avg(dailusage) over...." med sum (i stedet for avg), hvis det du virkelig ønsker er summen for den seneste uge. I din titel siger du, at du vil have gennemsnittet, men senere siger du, at du vil have summen. Forespørgslen skal være den samme bortset fra det, så brug den, du rent faktisk ønsker.
Som det blev påpeget af Gordon, er dette dybest set gennemsnittet af de seneste 6 datoer, hvor produktet blev brugt, hvilket kan være mere end blot de sidste 6 dage, hvis der er dage uden nogen rækker for det pågældende produkt på bordet, fordi det var t brugt overhovedet. For at komme uden om det kan du bruge en datotabel og din produkttabel.