比较两个查询的日期 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 - 但这主要是个人喜好问题,逻辑保持不变。
我有两个查询,第一个从我的 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 - 但这主要是个人喜好问题,逻辑保持不变。