根据日期和最小条件连接表

Join tables based on date and min condition

我有 2 个 table,其中一个 包含与其他列一起的单个日期列,第二个 table 包含开始日期、结束日期和外键列。

table一个

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  | ...        | ...  | ...

tableb

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 aIDtable bfID的最小值是否存在

我目前所掌握的是

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 秒。有什么办法可以提高这个?在第二个 select 值上将 group by 更改为 partition by 会得到相同的长度。

使用相关子查询可能会更快:

SELECT a.ID,
       (SELECT COALESCE(MIN(b.fid), 3)
        FROM b
        WHERE a.date between b.startDate AND b.endDate
       )
FROM a;

挑战在于很难为 WHERE 子句提供索引。