"À proximité" est plutôt flou.
Pour rejoindre table2
où timee
se situe à moins de 10 secondes de dateee
dans le futur :
SELECT *
FROM table1 t1
LEFT JOIN table2 t2 ON t2.timee BETWEEN t1.dateee
AND t1.dateee + interval '10 sec';
-
Le
LEFT JOIN
conserve les lignes detable1
dans le résultat, même sans correspondance danstable2
. -
Il peut y avoir plusieurs correspondances, de sorte que chaque ligne des tables de base peut être renvoyée plusieurs fois dans diverses combinaisons.
Alternative
Pour joindre chaque ligne dans table1
à la ligne avec l'horodatage supérieur suivant. Exactement une ligne dans le résultat par ligne sur 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 index sur (timee)
est essentiel pour la performance.