sql >> Database >  >> RDS >> Sqlserver

SQL-query voor voortschrijdend gemiddelde van 7 dagen in SQL Server

Probeer:

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

Viool:

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

Vervang "avg(dailusage) over...." door sum (in plaats van avg) als je echt de som van de afgelopen week wilt. In je titel zeg je dat je het gemiddelde wilt, maar later zeg je dat je de som wilt. De query moet verder hetzelfde zijn, dus gebruik wat je echt wilt.

Zoals Gordon opmerkte, is dit in feite het gemiddelde van de afgelopen 6 datums waarop het product is gebruikt, wat meer kan zijn dan alleen de afgelopen 6 dagen als er dagen zijn zonder rijen voor dat product op de tafel omdat het ' helemaal niet gebruikt. Om dat te omzeilen zou je een datumtabel en je producttabel kunnen gebruiken.



  1. Hoe MySQL op Windows te installeren

  2. Verbinding maken met MySQL-databases

  3. SELECTEER IN met Oracle

  4. Hoe kan ik een Postgres-script stoppen als er een fout optreedt?