通过范围表加入PLSQL组正在显示适当的计数
问题描述:
嗨我加入一个表格,范围为1个月天,以获取基于连接表(基表)的每天计数。通过范围表加入PLSQL组正在显示适当的计数
为此,我使用左外连接来计算每天的计数。 在我的基表如下所示(表名REGISTRIERUNG]
而且我已创建一个月范围内使用下面的查询
SELECT TO_DATE ('01-10-2017', 'dd-mm-yyyy') + ROWNUM - 1 AS daterange
FROM all_objects
WHERE ROWNUM <=
TO_DATE ('30-10-2017', 'dd-mm-yyyy')
- TO_DATE ('01-10-2017', 'dd-mm-yyyy')
+ 1;
,但我得到的计数1日期现在有记录匹配范围表 而不是0计数。
我正在使用下面的查询来获得最终结果。
SELECT TRUNC (a.daterange), COUNT (a.daterange)
FROM (SELECT TO_DATE ('01-10-2017', 'dd-mm-yyyy') + ROWNUM - 1
AS daterange
FROM all_objects
WHERE ROWNUM <=
TO_DATE ('30-10-2017', 'dd-mm-yyyy')
- TO_DATE ('01-10-2017', 'dd-mm-yyyy')
+ 1) a
LEFT OUTER JOIN
REGISTRIERUNG b
ON TRUNC (a.daterange) = TRUNC (b.MODIFIKATIONZEIT)
GROUP BY TRUNC (a.daterange)
ORDER BY TRUNC (a.daterange) ASC;
答
你不应该基于该是列数行总是填充(查询a.daterange
总是被填充,因为从你的内嵌视图此列的所有日期在一个月内) 。相反,您应该计算外部连接到带有生成日期的内联视图的表中的行数。请注意,count
函数将不会考虑列modifikationzeit
中具有null
值的行。
例如:
select a.daterange,
count(b.modifikationzeit)
from (select to_date('01-10-2017', 'dd-mm-yyyy') + level - 1 as daterange
from dual
connect by level <= to_date('31-10-2017', 'dd-mm-yyyy') -
to_date('01-10-2017', 'dd-mm-yyyy') + 1) a
left outer join registrierung b
on a.daterange = trunc(b.modifikationzeit)
group by a.daterange
order by a.daterange;
我已删除不必要trunc's
,并转换从查询到all_objects
使用connect by
子句之一。我还确定了十月份的日期生成 - 它有31天,而不是你的例子中的30天。
Thnaks很多工作 – user432843