sql >> Databáze >  >> RDS >> PostgreSQL

Připojte se ke dvěma stolům na základě blízkých časových razítek

"Nearby" je poněkud nejasné.
Připojit se k table2 kde timee leží do 10 sekund od dateee v budoucnu:

SELECT *
FROM   table1 t1
LEFT   JOIN table2 t2 ON t2.timee BETWEEN t1.dateee
                                      AND t1.dateee + interval '10 sec';
  • LEFT JOIN uchovává řádky z table1 ve výsledku i bez shody v table2 .

  • Může existovat více shod, takže každý řádek ze základních tabulek lze vrátit vícekrát v různých kombinacích.

Alternativa

Chcete-li spojit jednotlivé řádky v table1 na řádek s s nejbližší vyšší časovou značkou. Přesně jeden řádek ve výsledku na řádek v 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;

Index na (timee) je zásadní pro výkon.



  1. Zdá se, že nemohu připojit svou stránku PHP k testovacímu serveru SQL a databázi

  2. SUM data po GROUP_CONCAT s mySQL

  3. Změnit SQL tabulku - povolit hodnotu sloupce NULL

  4. Jak porovnat schémata databáze MySQL