我有一个包含2个日期时间列的表example1
,这些列不一定具有所有日期(即可能不包括周末)。我想从一年前开始创建一系列日期,并从表example1
获取日期时间,这两个列的每一天都会发生。
给出这样的数据:
col1 col2
01/01/2018 01/02/2018
01/02/2018 01/03/2018
01/03/2018 01/05/2018
01/03/2018 NULL
我想要的ouptput是:
OnDay CCol1 CCol2
01/01/2018 1 0
01/02/2018 1 1
01/03/2018 2 1
01/04/2018 0 0
01/05/2018 0 1
这是我尝试的但是我觉得这很烦人的ORA-00932:
WITH all_days (Onday) AS (
SELECT TRUNC(sysdate) OnDay FROM dual
UNION ALL
SELECT OnDay-1 FROM all_days
WHERE Onday > TRUNC(sysdate-365,'Q')
)
SELECT
OnDay
,COUNT(CASE WHEN TRUNC(ex.col1)=OnDay THEN 1 END) CCol1
,COUNT(CASE WHEN TRUNC(ex.col2)=OnDay THEN 1 END) CCol2
FROM all_days ad
LEFT JOIN example1 ex ON TRUNC(ex.col1)=ad.OnDay OR TRUNC(ex.col2)=ad.OnDay
GROUP BY OnDay
有趣的是,递归CTE单独工作,但在使用LEFT JOIN
运算符插入OR
后,我得到的错误似乎来自SELECT OnDay-1
。
有什么想法吗?
修改 我正在使用: Oracle Database 12c企业版12.1.0.2.0版 - 64位生产