sql >> Databasteknik >  >> RDS >> Sqlserver

SQL-fråga för 7 dagars rullande medelvärde i SQL Server

Försök:

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

Fiol:

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

Ersätt "avg(dailusage) over...." med summa (snarare än avg) om det du verkligen vill ha är summan för den senaste veckan. I din titel säger du att du vill ha genomsnittet men senare säger du att du vill ha summan. Frågan bör vara densamma förutom det, så använd vilken du faktiskt vill.

Som påpekades av Gordon är detta i princip genomsnittet av de senaste 6 datumen då produkten användes, vilket kan vara mer än bara de senaste 6 dagarna om det finns dagar utan några rader för den produkten på bordet eftersom det var inte används alls. För att komma runt det kan du använda en datumtabell och din produkttabell.



  1. SQL Server Index bakåtsökning:Förståelse, justering

  2. Upptäck hur kardinalitet påverkar prestanda

  3. Hur använder man Partition By eller Max?

  4. Castar NULL-typ vid uppdatering av flera rader