PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bergabunglah dengan dua tabel berdasarkan stempel waktu terdekat

"Terdekat" agak kabur.
Untuk bergabung dengan table2 dimana timee terletak dalam 10 detik dari dateee di masa depan:

SELECT *
FROM   table1 t1
LEFT   JOIN table2 t2 ON t2.timee BETWEEN t1.dateee
                                      AND t1.dateee + interval '10 sec';
  • LEFT JOIN menyimpan baris dari table1 dalam hasil, bahkan tanpa kecocokan di table2 .

  • Mungkin ada beberapa kecocokan, sehingga setiap baris dari tabel dasar dapat dikembalikan beberapa kali dalam berbagai kombinasi.

Alternatif

Untuk menggabungkan setiap baris di table1 ke baris dengan stempel waktu berikutnya yang lebih tinggi. Tepat satu baris dalam hasil per baris pada 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 pada (timee) sangat penting untuk kinerja.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pesan string varchar sebagai numerik

  2. Batasan unik Postgres vs indeks

  3. Postgresql, pilih bidang kosong

  4. cara mengonversi menit integer ke interval di postgres

  5. Permintaan lintas server PostgreSQL?