Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zapytanie SQL dla 7-dniowej średniej kroczącej w SQL Server

Wypróbuj:

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

Skrzypce:

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

Zastąp „avg(dailusage) over...” sumą (zamiast średniej), jeśli tak naprawdę chcesz otrzymać sumę z ostatniego tygodnia. W swoim tytule mówisz, że chcesz średniej, ale później mówisz, że chcesz sumę. Zapytanie powinno być takie samo, poza tym, więc użyj tego, czego naprawdę chcesz.

Jak zauważył Gordon, jest to w zasadzie średnia z ostatnich 6 dat, w których produkt był używany, co może oznaczać więcej niż tylko ostatnie 6 dni, jeśli w tabeli są dni bez wierszy dla tego produktu, ponieważ nie był w ogóle używane. Aby obejść ten problem, możesz użyć tabeli dat i tabeli produktów.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wiele instrukcji INSERT vs. pojedyncza INSERT z wieloma VALUES

  2. Jak wbudować funkcjonalność RUNAS /NETONLY do programu (C#/.NET/WinForms)?

  3. Połącz się z serwerem SQL z uwierzytelnianiem systemu Windows z komputera z systemem Linux za pośrednictwem JDBC

  4. SQL Server:Awaria łącza komunikacyjnego Wymagany SSL (nie udało się odebrać pakietu)

  5. Klauzula WHERE dotycząca typu danych SQL Server Text