PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Memilih rata-rata catatan yang dikelompokkan berdasarkan periode 5 menit

SELECT grid.t5
      ,min(t."time") AS min_time
--    ,array_agg(extract(min FROM t."time")) AS 'players_on' -- optional
      ,avg(t.players) AS avg_players
      ,avg(t.servers) AS avg_servers
FROM (
   SELECT generate_series(min("time")
                         ,max("time"), interval '5 min') AS t5
   FROM tbl
   ) grid
LEFT JOIN tbl t ON t."time" >= grid.t5
               AND t."time" <  grid.t5 +  interval '5 min'
GROUP  BY grid.t5
ORDER  BY grid.t5;

Jelaskan

  • Subkueri grid menghasilkan satu baris untuk setiap 5 menit dari minimum hingga maksimum "time" di meja Anda.

  • KIRI GABUNG kembali ke tabel mengiris data dalam interval 5 menit. sertakan dengan hati-hati batas bawah dan kecualikan batas atas.

  • Untuk membuang slot 5 menit di mana tidak terjadi apa-apa, gunakan JOIN sebagai pengganti LEFT JOIN .

  • Agar waktu grid Anda dimulai pada 0:00, 5:00 dll, bulatkan min("time") di generate_series() .

Penjelasan lebih lanjut dalam jawaban terkait ini:
Kelompokkan menurut interval data
PostgreSQL:menjalankan hitungan baris untuk kueri 'menurut menit'

Selain:Saya tidak akan menggunakan time sebagai pengenal. Ini adalah kata yang dicadangkan dalam SQL standar dan nama fungsi / ketik di Postgres.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mendapatkan rekor nilai tertinggi kedua ke terendah berdasarkan urutan berdasarkan bidang di PostgreSQL

  2. Praktik terbaik untuk menyimpan string multibahasa

  3. Kesalahan PostgreSQL saat mencoba membuat ekstensi

  4. Metode yang tidak ditentukan auto_upgrade! saat mendorong aplikasi Sinatra/DataMapper ke Heroku

  5. Bisakah PostgreSQL mengindeks kolom array?