"Nära" är ganska flummigt.
För att gå med i table2
där timee
ligger inom 10 sekunder efter dateee
i framtiden:
SELECT *
FROM table1 t1
LEFT JOIN table2 t2 ON t2.timee BETWEEN t1.dateee
AND t1.dateee + interval '10 sec';
-
LEFT JOIN
behåller rader fråntable1
i resultatet, även utan matchning itable2
. -
Det kan finnas flera matchningar, så att varje rad från bastabellerna kan returneras flera gånger i olika kombinationer.
Alternativ
För att slå samman varje rad i table1
till raden med nästa högre tidsstämpel. Precis en rad i resultatet per rad på 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;
Ett index på (timee)
är avgörande för prestanda.