PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Dołącz do dwóch tabel na podstawie pobliskich znaczników czasu

„W pobliżu” jest raczej niewyraźne.
Aby dołączyć do table2 gdzie timee leży w ciągu 10 sekund od dateee w przyszłości:

SELECT *
FROM   table1 t1
LEFT   JOIN table2 t2 ON t2.timee BETWEEN t1.dateee
                                      AND t1.dateee + interval '10 sec';
  • LEFT JOIN przechowuje wiersze z table1 w wyniku, nawet bez dopasowania w table2 .

  • Może być wiele dopasowań, więc każdy wiersz z tabel podstawowych może zostać zwrócony wiele razy w różnych kombinacjach.

Alternatywna

Aby połączyć każdy wiersz w table1 do wiersza z następnym wyższym znacznikiem czasu. Dokładnie jeden wiersz w wyniku na wiersz w 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;

Indeks na (timee) ma zasadnicze znaczenie dla wydajności.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd rejestru PostgreSQL pg_ctl pod Windows 7

  2. Zadeklaruj zmienną typu wiersza w PL/pgSQL

  3. Trwały błąd limitu czasu H12 dla wszystkich żądań, które uruchamiają zapytanie do bazy danych

  4. Dodanie ograniczenia „jeden z dwóch nie zerowych” w postgresql

  5. nie można wykonywać zapytań RDS na heroku