"Cerca" es bastante confuso.
Para unirse a table2
donde timee
se encuentra dentro de los 10 segundos de dateee
en el futuro:
SELECT *
FROM table1 t1
LEFT JOIN table2 t2 ON t2.timee BETWEEN t1.dateee
AND t1.dateee + interval '10 sec';
-
El
LEFT JOIN
mantiene las filas detable1
en el resultado, incluso sin coincidencia entable2
. -
Puede haber varias coincidencias, por lo que cada fila de las tablas base se puede devolver varias veces en varias combinaciones.
Alternativa
Para unir cada fila en table1
a la fila con la siguiente marca de tiempo más alta. Exactamente una fila en el resultado por fila en 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;
Un índice en (timee)
es esencial para el rendimiento.