PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Joindre deux tables basées sur des horodatages proches

"À proximité" est plutôt flou.
Pour rejoindre table2timee 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 de table1 dans le résultat, même sans correspondance dans table2 .

  • 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.