"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 JOIN
behält Zeilen vontable1
im 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.