Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL-Abfrage für den gleitenden 7-Tage-Durchschnitt in SQL Server

Versuchen Sie:

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

Geige:

http://sqlfiddle.com/#!6/f674a7/4/0

Ersetzen Sie "avg(dailusage) over..." durch sum (statt avg), wenn Sie wirklich die Summe der letzten Woche wollen. In Ihrem Titel sagen Sie, Sie wollen den Durchschnitt, aber später sagen Sie, Sie wollen die Summe. Ansonsten sollte die Abfrage dieselbe sein, also verwenden Sie die, die Sie tatsächlich möchten.

Wie von Gordon darauf hingewiesen wurde, ist dies im Grunde der Durchschnitt der letzten 6 Daten, an denen das Produkt verwendet wurde, was mehr sein kann als nur die letzten 6 Tage, wenn es Tage ohne Zeilen für dieses Produkt in der Tabelle gibt, weil es nicht überhaupt nicht verwendet. Um das zu umgehen, könnten Sie eine Datumstabelle und Ihre Produkttabelle verwenden.