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

SQL-forespørgsel for 7 dages rullende gennemsnit i SQL Server

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.



  1. Sådan konverteres et Unix-tidsstempel til en dato/tidsværdi i PostgreSQL

  2. Bedste DBaaS-løsninger til PostgreSQL

  3. Video:Oracle 12c IDENTITY Column Performance på RAC

  4. Nye AMD-processorfamilier kan sammenlignes med nye Intel-processorer