PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chọn trung bình các bản ghi được nhóm theo khoảng thời gian 5 phút

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;

Giải thích

  • Truy vấn con grid tạo một hàng cho mỗi 5 phút từ tối thiểu đến tối đa "time" trong bảng của bạn.

  • THAM GIA TRÁI trở lại bảng phân chia dữ liệu trong khoảng thời gian 5 phút. Cẩn thận bao gồm đường viền dưới và loại trừ đường viền trên.

  • Để thả các vị trí 5 phút mà không có gì xảy ra, hãy sử dụng JOIN thay cho LEFT JOIN .

  • Để thời gian lưới của bạn bắt đầu lúc 0:00, 5:00, v.v., hãy làm tròn min("time") trong generate_series() .

Giải thích thêm trong các câu trả lời liên quan sau:
Nhóm theo khoảng dữ liệu
PostgreSQL:số hàng đang chạy cho truy vấn 'theo phút'

Ngoài ra:Tôi sẽ không sử dụng time làm định danh. Đó là từ dành riêng trong SQL chuẩn và một hàm / tên loại trong 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. Tìm kiếm trên nhiều bảng và cũng hiển thị tên bảng trong các hàng kết quả

  2. cách sử dụng \ timing trong postgres

  3. Không tìm thấy ID giao dịch Postgresql

  4. Postgres tạo lỗi tiện ích mở rộng POSTGIS với CentOS 6

  5. Rails tra cứu theo mảng được tuần tự hóa