Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Query SQL per media mobile di 7 giorni in SQL Server

Prova:

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

Violino:

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

Sostituisci "avg(dailusage) over...." con sum (piuttosto che avg) se quello che vuoi veramente è la somma dell'ultima settimana. Nel tuo titolo dici di volere la media ma poi dici di volere la somma. La query dovrebbe essere la stessa diversa da quella, quindi usa quella che vuoi effettivamente.

Come è stato sottolineato da Gordon, questa è fondamentalmente la media delle ultime 6 date in cui è stato utilizzato il prodotto, che potrebbe essere più degli ultimi 6 giorni se ci sono giorni senza righe per quel prodotto sul tavolo perché era ' non usato affatto. Per aggirare il problema potresti utilizzare una tabella delle date e la tabella dei tuoi prodotti.