sql >> Database >  >> RDS >> PostgreSQL

Voeg twee tabellen samen op basis van tijdstempels in de buurt

"In de buurt" is nogal vaag.
Om lid te worden van table2 waar timee ligt binnen 10 seconden van dateee in de toekomst:

SELECT *
FROM   table1 t1
LEFT   JOIN table2 t2 ON t2.timee BETWEEN t1.dateee
                                      AND t1.dateee + interval '10 sec';
  • De LEFT JOIN houdt rijen uit table1 in het resultaat, zelfs zonder overeenkomst in table2 .

  • Er kunnen meerdere overeenkomsten zijn, zodat elke rij uit de basistabellen meerdere keren in verschillende combinaties kan worden geretourneerd.

Alternatief

Om elke rij in table1 samen te voegen naar de rij met met de eerstvolgende hogere tijdstempel. Precies één rij in het resultaat per rij op 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;

Een index op (timee) is essentieel voor prestaties.



  1. Wat is de gemaakte datum-tijd voor tabelrij in Oracle?

  2. Volgende dichtstbijzijnde datum en tijd in MySQL

  3. Delete, Truncate of Drop om een ​​tabel in MySQL op te schonen

  4. Laravel Sail herbouw standaard database