sql >> Databasteknik >  >> RDS >> PostgreSQL

Gå med i två tabeller baserat på närliggande tidsstämplar

"Nära" är ganska flummigt.
För att gå med i table2 där timee ligger inom 10 sekunder efter dateee i framtiden:

SELECT *
FROM   table1 t1
LEFT   JOIN table2 t2 ON t2.timee BETWEEN t1.dateee
                                      AND t1.dateee + interval '10 sec';
  • LEFT JOIN behåller rader från table1 i resultatet, även utan matchning i table2 .

  • Det kan finnas flera matchningar, så att varje rad från bastabellerna kan returneras flera gånger i olika kombinationer.

Alternativ

För att slå samman varje rad i table1 till raden med nästa högre tidsstämpel. Precis en rad i resultatet per rad på 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;

Ett index på (timee) är avgörande för prestanda.



  1. MySQL får första icke-nullvärdet efter grupp av

  2. vad är den alternativa funktionen mysql_list_tables() i php 5

  3. PreparedStatement cachning - vad betyder det (hur fungerar det)

  4. En till många relation mellan AspNetUsers (Identity) och en anpassad tabell