比较两个查询的日期 PL/SQL

Compare dates from two queries PL/SQL

我有两个查询,第一个从我的 table 获取一些数据,第二个查询显示两个指定日期之间的所有半小时时间。有没有一种方法可以比较查询 1 和查询 2 的日期结果,并在查询 1 结果中不存在查询 2 的日期时将两个结果合并在一起。

我将附上一张小图来说明我的意思。

查询 1:

SELECT 
reading_date, 
reading_value    
FROM DCM_READING
WHERE reading_date BETWEEN TO_DATE('17-NOV-2019' || ' 000000', 'DD-MON-YYYY HH24MISS')
AND  TO_DATE('19-NOV-2019'   || ' 235959', 'DD-MON-YYYY HH24MISS')
ORDER BY reading_date; 

查询 2:

  select TO_DATE('17-NOV-2019' || ' 000000', 'DD-MON-YYYY HH24MISS') + 
         ( level / 48 ) dt
from   dual
connect by level <= ( 48 + ( 48 * 
    (  TO_DATE('19-NOV-2019' || ' 000000', 'DD-MON-YYYY HH24MISS') - 
         TO_DATE('17-NOV-2019' || ' 000000', 'DD-MON-YYYY HH24MISS') )
  ) 
) ;

您可以在 CTE 中枚举您想要的时间戳,然后将 table 与 left join:

with cte (reading_date) as (
    select date '2020-11-17' from dual
    union all
    select reading_date + interval '30' minute 
    from cte 
    where reading_date + interval '30' minute < date '2020-11-19'
)
select c.reading_date, d.reading_value
from cte c
left join dcm_reading d on d.reading_date = c.reading_date
order by c.reading_date

我喜欢使用递归查询而不是 Oracle 特定的 connect by 语法,因为它们是标准的 SQL - 但这主要是个人喜好问题,逻辑保持不变。