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

Kỷ lục gần nhất cho một loạt các ngày

Sẽ đơn giản và nhanh nhất với LEFT JOINDISTINCT ON :

WITH x(search_ts) AS (
    VALUES
     ('2012-07-26 20:31:29'::timestamp)              -- search timestamps
    ,('2012-05-14 19:38:21')
    ,('2012-05-13 22:24:10')
    )
SELECT DISTINCT ON (x.search_ts)
       x.search_ts, r.id, r.resulttime
FROM   x
LEFT   JOIN results r ON r.resulttime <= x.search_ts -- smaller or same
-- WHERE some_id = 15                                -- some condition?
ORDER  BY x.search_ts, r.resulttime DESC;

Kết quả (giá trị giả):

search_ts           | id     | resulttime
--------------------+--------+----------------
2012-05-13 22:24:10 | 404643 | 2012-05-13 22:24:10
2012-05-14 19:38:21 | 404643 | 2012-05-13 22:24:10
2012-07-26 20:31:29 | 219822 | 2012-07-25 19:47:44

Tôi sử dụng CTE để cung cấp các giá trị, có thể là một bảng hoặc hàm hoặc mảng chưa được xếp hạng hoặc một tập hợp được tạo bằng generate_series() một cái gì đó khác nữa. (Ý của bạn là generate_series() bởi "create_sequence ()"?)

Đầu tiên tôi JOIN dấu thời gian tìm kiếm cho tất cả các hàng trong bảng có resulttime sớm hơn hoặc bằng . Tôi sử dụng LEFT JOIN thay vì JOIN để dấu thời gian tìm kiếm không bị bỏ qua khi không có resulttime trước đó trong bảng.

Với DISTINCT ON (x.search_ts) kết hợp với ORDER BY x.search_ts, r.resulttime DESC chúng tôi nhận được resulttime lớn nhất (hoặc một trong những điều lớn nhất như nhau) nhỏ hơn hoặc bằng mỗi dấu thời gian tìm kiế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. Chuẩn hóa bảo mật PostgreSQL trên môi trường đa đám mây

  2. Phân vùng postgresql và sqlalchemy

  3. Kết hợp hai bảng thành một bảng mới để các hàng được chọn từ bảng kia bị bỏ qua

  4. Làm thế nào để tạo danh sách Tháng trong PostgreSQL?

  5. Việc thêm các bảng không liên quan trong mệnh đề WITH có làm chậm truy vấn trong PostgreSQL không?