首页 > 解决方案 > SQL - 有效地比较特定 ID 的日期

问题描述

我有两个看起来像这样的数据库:

表格1

ID 时间1
1 21.3.2000, 16:00
1 21.3.2000, 17:00
... ...
2 21.3.2000, 16:00
... ...

表 2

ID 时间2
1 21.3.2000, 16:30
1 21.3.2000, 18:00
... ...
2 21.3.2000, 15:30
... ...

对于每个ID我有几个日期time1time2.
对于每个time1我想要最接近time2的也不大于time1.
我试过了,但甚至像这样构建 carthesian 产品:

SELECT h."ID", h."time", m."time"
FROM Table1 as h, Table2 as m
WHERE h."ID" = m."ID"

由于数据量很大,加载了很长时间,有什么办法可以提高速度并获得相同的结果?

标签: sqldatabasepostgresql

解决方案


您提到 time2 可能大于或等于 time1 ...这简化了逻辑。我会尝试横向连接:

SELECT *
FROM table1
LEFT JOIN LATERAL (
    SELECT *
    FROM table2
    WHERE table2.ID = table1.ID AND table2.time2 >= table1.time1
    ORDER BY table2.time2
    LIMIT 1
) AS table2_new ON true

推荐阅读