"In der Nähe" ist ziemlich verschwommen.
Um table2 beizutreten wobei timee liegt innerhalb von 10 Sekunden von dateee zukünftig:
SELECT *
FROM table1 t1
LEFT JOIN table2 t2 ON t2.timee BETWEEN t1.dateee
AND t1.dateee + interval '10 sec';
-
Der
LEFT JOINbehält Zeilen vontable1im Ergebnis, auch ohne Übereinstimmung intable2. -
Es kann mehrere Übereinstimmungen geben, sodass jede Zeile aus den Basistabellen mehrmals in verschiedenen Kombinationen zurückgegeben werden kann.
Alternative
Zum Verbinden aller Zeilen in table1 zur Zeile mit dem nächsthöheren Zeitstempel. Genau eine Zeile im Ergebnis pro Zeile auf 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;
Ein Index auf (timee) ist für die Leistung unerlässlich.