„W pobliżu” jest raczej niewyraźne.
Aby dołączyć do table2
gdzie timee
leży w ciągu 10 sekund od dateee
w przyszłości:
SELECT *
FROM table1 t1
LEFT JOIN table2 t2 ON t2.timee BETWEEN t1.dateee
AND t1.dateee + interval '10 sec';
-
LEFT JOIN
przechowuje wiersze ztable1
w wyniku, nawet bez dopasowania wtable2
. -
Może być wiele dopasowań, więc każdy wiersz z tabel podstawowych może zostać zwrócony wiele razy w różnych kombinacjach.
Alternatywna
Aby połączyć każdy wiersz w table1
do wiersza z następnym wyższym znacznikiem czasu. Dokładnie jeden wiersz w wyniku na wiersz w 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 na (timee)
ma zasadnicze znaczenie dla wydajności.