Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Query untuk Rolling Average 7 Hari di SQL Server

Coba:

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

Biola:

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

Ganti "avg(dailusage) over...." dengan sum (bukan avg) jika yang Anda inginkan adalah jumlah selama seminggu terakhir. Dalam judul Anda, Anda mengatakan bahwa Anda menginginkan rata-rata tetapi kemudian Anda mengatakan bahwa Anda menginginkan jumlahnya. Kueri harus sama selain itu, jadi gunakan yang mana pun yang Anda inginkan.

Seperti yang ditunjukkan oleh Gordon ini pada dasarnya adalah rata-rata dari 6 tanggal terakhir di mana produk tersebut digunakan, yang mungkin lebih dari hanya 6 hari terakhir jika ada hari tanpa baris untuk produk tersebut di atas meja karena tidak t digunakan sama sekali. Untuk menyiasatinya, Anda dapat menggunakan tabel tanggal dan tabel produk Anda.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana FOR XML PATH('') bekerja saat menggabungkan baris

  2. Tidak dapat memotong tabel karena direferensikan oleh batasan FOREIGN KEY?

  3. Arsitektur SQL Server AlwaysOn (Availability Group) dan Instalasi Langkah demi Langkah -1

  4. Hasil SSMS ke Kotak - CRLF tidak disimpan dalam salin/tempel - ada teknik yang lebih baik?

  5. SQL Server:konversi ((int)tahun,(int)bulan,(int)hari) ke Datetime