PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Присъединете се към две маси въз основа на близки времеви клейма

„Наблизо“ е доста размито.
За да се присъедините към table2 където timee се намира в рамките на 10 секунди от dateee в бъдеще:

SELECT *
FROM   table1 t1
LEFT   JOIN table2 t2 ON t2.timee BETWEEN t1.dateee
                                      AND t1.dateee + interval '10 sec';
  • LEFT JOIN запазва редове от table1 в резултата, дори без съвпадение в table2 .

  • Може да има множество съвпадения, така че всеки ред от базовите таблици да може да бъде върнат многократно в различни комбинации.

Алтернатива

За да съедините всеки ред в table1 към реда със следващото по-високо времево клеймо. Точно така един ред в резултата на ред на 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;

Индекс на (timee) е от съществено значение за производителността.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgres:вземете първите n срещания на стойност във всяка група

  2. грешка при инсталиране на python pip psycopg2

  3. Postgresql обработка на транзакции с java

  4. Entity Framework Core postgresql Array Type Mapping не работи

  5. Заявката на SQLAlchemy показва грешка Не може да присъедини таблица/избираеми „работни потоци“ към себе си