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

Tham gia hai bảng dựa trên dấu thời gian gần đó

"Lân cận" khá mờ.
Để tham gia table2 ở đâu timee nằm trong vòng 10 giây của dateee trong tương lai:

SELECT *
FROM   table1 t1
LEFT   JOIN table2 t2 ON t2.timee BETWEEN t1.dateee
                                      AND t1.dateee + interval '10 sec';
  • LEFT JOIN giữ các hàng từ table1 trong kết quả, ngay cả khi không khớp trong table2 .

  • Có thể có nhiều kết quả phù hợp, để mỗi hàng từ bảng cơ sở có thể được trả về nhiều lần theo nhiều cách kết hợp khác nhau.

Thay thế

Để nối từng hàng trong table1 vào hàng có dấu thời gian cao hơn tiếp theo. Chính xác một hàng trong kết quả mỗi hàng trên table1 :

SELECT *
FROM   table1 t1
LEFT   JOIN LATERAL (
   SELECT *
   FROM   table2 t2
   WHERE  t2.timee >= t1.dateee
   ORDER  BY t2.timee
   LIMIT  1
   ) ON TRUE;

Chỉ mục trên (timee) rất cần thiết cho hiệu suất.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cột văn bản Postgres chỉ cho phép / chuyển đổi thành chữ thường và không có ký tự đặc biệt như:Ñöáè

  2. Xóa phần tử mảng jsonb theo giá trị

  3. Sự phát triển của khả năng chịu lỗi trong PostgreSQL:Cam kết đồng bộ

  4. Chọn số hàng trong postgres

  5. Dấu thời gian jOOQ được lưu trữ với độ lệch múi giờ cục bộ