"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 trongtable2
. -
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.