"Terdekat" agak kabur.
Untuk bergabung dengan table2
dimana timee
terletak dalam 10 detik dari dateee
di masa depan:
SELECT *
FROM table1 t1
LEFT JOIN table2 t2 ON t2.timee BETWEEN t1.dateee
AND t1.dateee + interval '10 sec';
-
LEFT JOIN
menyimpan baris daritable1
dalam hasil, bahkan tanpa kecocokan ditable2
. -
Mungkin ada beberapa kecocokan, sehingga setiap baris dari tabel dasar dapat dikembalikan beberapa kali dalam berbagai kombinasi.
Alternatif
Untuk menggabungkan setiap baris di table1
ke baris dengan stempel waktu berikutnya yang lebih tinggi. Tepat satu baris dalam hasil per baris pada 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;
Indeks pada (timee)
sangat penting untuk kinerja.