【发布时间】:2020-04-05 22:36:41
【问题描述】:
我有 2 个表,其中一个包含一个日期列以及其他列,第二个表包含一个 startdate、enddate 和外键列。
表一
ID | DATE | COL1 | COL2
1 | 12.01.2018 | X | Y
2 | 12.02.2018 | Z | Y
3 | 12.03.2018 | Y | A
4 | 12.04.2018 | B | A
n | ... | ... | ...
表b
ID | startDATE | endDate | fID
1 | 01.01.2018 | 31.01.2018 | 1
2 | 04.01.2018 | 15.01.2018 | 2
3 | 01.02.2018 | 28.02.2018 | 1
4 | 01.04.2018 | 30.04.2018 | 1
5 | 13.04.2018 | 20.04.2018 | 2
n | ... | ... | ...
table a 包含大约 +150 000 个条目 table b 大约 +6000
我想查询table a的ID和table b中fID的最小值(如果存在)。
我目前拥有的是
SELECT
a.ID
,nvl(min(b.fID),3)
FROM
a
LEFT JOIN b ON a.date between b.startDate AND b.endDate
GROUP BY
a.ID
这按预期工作,但性能很差,查询需要大约 45 秒才能解决。有什么办法可以提升这个吗?在第二个选择值上将 group by 更改为 partition by 会产生相同的长度。
【问题讨论】:
标签: sql oracle date join between