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

Lấy tổng hợp trong các khoảng thời gian tùy ý

Trong khoảng thời gian 15 phút, hãy xây dựng dựa trên ví dụ của bạn:

SELECT DISTINCT
     , date_trunc('hour', t) AS h
     , floor(EXTRACT(minute FROM t) / 15) AS m15
     , min(price) OVER w
     , max(price) OVER w
     , first_value(price) OVER w
     , last_value(price) OVER w
FROM   ticker
WINDOW w AS (PARTITION BY date_trunc('hour', t)
                        , floor(extract(minute FROM t) / 15));

Cũng hoạt động trong 5 phút.

Một giải pháp chung chung khác trong bất kỳ khoảng thời gian thông thường nào, trong bất kỳ khoảng thời gian nào:

WITH x AS (
    SELECT t1, t1 + interval '5min' AS t2
    FROM   generate_series(timestamp '2012-07-18 00:00'
                         , timestamp '2012-07-18 23:55'
                         , interval '5 min') AS t1
    )
SELECT DISTINCT ON (1)
       x.t1
     , min(price)         OVER w
     , max(price)         OVER w
     , first_value(price) OVER w
     , last_value(price)  OVER w
FROM   x
JOIN   ticker y ON y.t >= x.t1  -- use LEFT JOIN to include empty intervals
               AND y.t <  x.t2  -- don't use BETWEEN
WINDOW w AS (PARTITION BY x.t1)
ORDER  BY x.t1;

Các câu trả lời liên quan có giải thích thêm:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tham gia một đến nhiều và truy xuất kết quả duy nhất

  2. Làm cách nào để chèn vào bảng giá trị từ hai mảng trong Postgres?

  3. Tổng quan về các thay đổi chỉ mục trong PostgreSQL 11

  4. setParameter () không đặt dấu ngoặc kép thích hợp

  5. chọn giá trị tối đa và giá trị tối thiểu mỗi x số lượng hàng-postgresql