sql - 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
我有几个日期time1
和time2
.
对于每个time1
我想要最接近time2
的也不大于time1
.
我试过了,但甚至像这样构建 carthesian 产品:
SELECT h."ID", h."time", m."time"
FROM Table1 as h, Table2 as m
WHERE h."ID" = m."ID"
由于数据量很大,加载了很长时间,有什么办法可以提高速度并获得相同的结果?
解决方案
您提到 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
推荐阅读
- kotlin - 我应该如何在 kotlinpoet 的函数中添加属性
- php - 如果预匹配,则从双引号中提取媒体
- python - Python Tkinter Treeview 搜索所有条目
- c - strtok 函数 const char 指针错误
- angular - Angular5 + SocketIO 来提升::Beast
- python - 如果满足条件,则替换 3D 数组中的 2D 子数组
- javascript - 我的threejs材料有一些颜色问题
- php - 我们可以在准备语句的查询中进行查询吗?
- android - Android Studio 3.1.2,无法解决依赖问题
- selenium - 如何使用远程 Web 驱动程序设置/配置具有所需功能的 winium 和 webdriver?