【发布时间】:2018-09-24 08:42:58
【问题描述】:
我需要填补日期之间的空白,所以我得到了这个 sql 查询:
select * from (
SELECT null as ID, to_date('15/08/28', 'yy/mm/dd') + ROWNUM - 1 as DATE_OF_RATE, null as VALUE, null as CURRENCY_ID
FROM dual
CONNECT BY LEVEL <= to_date('15/09/05', 'yy/mm/dd') - to_date('15/08/28', 'yy/mm/dd') + 1
) empCur
left join CURRENCY_RATE cr on TRUNC(empCur.DATE_OF_RATE) = (cr.DATE_OF_RATE)
AND cr.currency_id = 4;
我需要从 currency_rate 表中传递 min 和 max date_of_rate 而不是上面的硬编码日期。所以我尝试了这个,但我得到了不同的结果:
select * from (
SELECT null as ID, (select min(date_of_rate) from currency_rate) + ROWNUM - 1 as DATE_OF_RATE, null as VALUE, null as CURRENCY_ID
FROM dual
CONNECT BY LEVEL <= (select max(date_of_rate) - min(date_of_rate) + 1 from currency_rate)
) empCur
left join CURRENCY_RATE cr on TRUNC(empCur.DATE_OF_RATE) = (cr.DATE_OF_RATE)
where cr.date_of_rate between to_date('15/08/28', 'yy/mm/dd') and to_date('15/09/05', 'yy/mm/dd')
AND cr.currency_id = 4;
如您所见,这并没有填补日期范围之间的空白。有没有可能我想要实现的目标?
【问题讨论】:
-
在您的第二个查询中,您在左连接表
CURRENCY_RATE上使用WHERE条件,从而基本上击败了左连接并将其转变为内连接。将WHERE替换为and,看看是否有帮助。