我参与了一个需要按日期构建直方图的项目。在我之前,这是通过 Java 代码对每个矩形(日期子区域)对数据库进行大量 SQL 查询来完成的。
我尝试另一种方法:
select sum(CNT), trunc(DATE, 'MM') from DATA
where DATE >= TO_DATE('01-01-2012','DD-MM-YYYY')
and INC_DATE <= TO_DATE('31-12-2012','DD-MM-YYYY')
group by trunc(DATE, 'MM')
order by trunc(DATE, 'MM');
并从 Java 代码中的 ResultSet 收集数据。但如果某个月份没有数据,我会错过直方图中的矩形!
是否可以修复 SQL(或可能是 PL/SQL)表达式以在结果中包含缺失日期且总和为零?
或者如何在 Java 中构建更优雅的日期序列生成器来查找丢失的日期(与天/月/季度/年对齐)?
尝试这样的事情(简化的例子):
with
months_int as
(select trunc(min(inc_date), 'MM') min_month, trunc(max(inc_date), 'MM') max_month
from data),
months as
(
select add_months(min_month, level-1) mnth_date
from months_int
connect by add_months(min_month, level-1)<= max_month
)
select mnth_date, sum(cnt)
from data right outer join months on trunc(inc_date, 'MM') = mnth_date
group by mnth_date
order by mnth_date
这是一个 sqlfiddle 示例
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)