PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Junte duas tabelas com base em carimbos de data/hora próximos


"Perto" é um pouco confuso.
Para ingressar na table2 onde timee está dentro de 10 segundos de dateee no futuro:
SELECT *
FROM   table1 t1
LEFT   JOIN table2 t2 ON t2.timee BETWEEN t1.dateee
                                      AND t1.dateee + interval '10 sec';

  • O LEFT JOIN mantém linhas de table1 no resultado, mesmo sem correspondência em table2 .

  • Pode haver várias correspondências, de modo que cada linha das tabelas base possa ser retornada várias vezes em várias combinações.

Alternativa


Para unir cada linha em table1 para a linha com o próximo carimbo de data/hora mais alto. Exatamente uma linha no resultado por linha em 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;

Um índice em (timee) é essencial para o desempenho.