"In de buurt" is nogal vaag.
Om lid te worden van table2
waar timee
ligt binnen 10 seconden van dateee
in de toekomst:
SELECT *
FROM table1 t1
LEFT JOIN table2 t2 ON t2.timee BETWEEN t1.dateee
AND t1.dateee + interval '10 sec';
-
De
LEFT JOIN
houdt rijen uittable1
in het resultaat, zelfs zonder overeenkomst intable2
. -
Er kunnen meerdere overeenkomsten zijn, zodat elke rij uit de basistabellen meerdere keren in verschillende combinaties kan worden geretourneerd.
Alternatief
Om elke rij in table1
samen te voegen naar de rij met met de eerstvolgende hogere tijdstempel. Precies één rij in het resultaat per rij op 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;
Een index op (timee)
is essentieel voor prestaties.