sql >> Database teknologi >  >> RDS >> PostgreSQL

Deltag i to tabeller baseret på nærliggende tidsstempler

"I nærheden" er ret uklar.
For at deltage i table2 hvor timee ligger inden for 10 sekunder efter dateee i fremtiden:

SELECT *
FROM   table1 t1
LEFT   JOIN table2 t2 ON t2.timee BETWEEN t1.dateee
                                      AND t1.dateee + interval '10 sec';
  • LEFT JOIN beholder rækker fra table1 i resultatet, selv uden match i table2 .

  • Der kan være flere matches, så hver række fra basistabellerne kan returneres flere gange i forskellige kombinationer.

Alternativ

For at forbinde hver række i table1 til rækken med det næste højere tidsstempel. Nøjagtig en række i resultatet pr. række 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;

Et indeks på (timee) er afgørende for ydeevnen.



  1. MySQL og PHP - hvordan får man vist alle rækker, hvor feltværdien er lig med x?

  2. Kunne ikke konvertere parameterværdi fra en streng til en Int32

  3. MySql-opdatering efter indsættelse af nodejs

  4. MySQL SELECT WHERE datetime matcher dag (og ikke nødvendigvis tid)