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

Postgresql SQL GROUP BY khoảng thời gian với độ chính xác tùy ý (xuống đến mili giây)

Bạn có thể tạo một bảng "nhóm" bằng cách thêm các khoảng được tạo bởi create_series (). Câu lệnh SQL này sẽ tạo một bảng gồm các nhóm năm phút cho ngày đầu tiên (giá trị của min(measured_at) ) trong dữ liệu của bạn.

select 
  (select min(measured_at)::date from measurements) + ( n    || ' minutes')::interval start_time,
  (select min(measured_at)::date from measurements) + ((n+5) || ' minutes')::interval end_time
from generate_series(0, (24*60), 5) n

Quấn đó trong một biểu thức bảng chung và bạn có thể tham gia và nhóm trên đó như thể nó là một bảng cơ sở.

with five_min_intervals as (
  select 
    (select min(measured_at)::date from measurements) + ( n    || ' minutes')::interval start_time,
    (select min(measured_at)::date from measurements) + ((n+5) || ' minutes')::interval end_time
  from generate_series(0, (24*60), 5) n
)
select f.start_time, f.end_time, avg(m.val) avg_val 
from measurements m
right join five_min_intervals f 
        on m.measured_at >= f.start_time and m.measured_at < f.end_time
group by f.start_time, f.end_time
order by f.start_time

Việc nhóm theo một số giây tùy ý cũng tương tự - sử dụng date_trunc() .

Việc sử dụng phổ biến hơn của create_series () cho phép bạn tránh đoán giới hạn trên cho giới hạn năm phút. Trong thực tế, bạn có thể xây dựng cái này dưới dạng một dạng xem hoặc một hàm. Bạn có thể nhận được hiệu suất tốt hơn từ bảng cơ sở.

select 
  (select min(measured_at)::date from measurements) + ( n    || ' minutes')::interval start_time,
  (select min(measured_at)::date from measurements) + ((n+5) || ' minutes')::interval end_time
from generate_series(0, ((select max(measured_at)::date - min(measured_at)::date from measurements) + 1)*24*60, 5) n;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự khác biệt về dấu thời gian trong giờ cho PostgreSQL

  2. Biên dịch phần mở rộng pg_repack trên định dạng nhị phân của cài đặt PostgreSQL

  3. Cách thay đổi người dùng thành Superuser trong PostgreSQL

  4. Postgresql GROUP_CONCAT tương đương?

  5. LỖI PostgreSQL:hàm to_tsvector (ký tự thay đổi, không xác định) không tồn tại