我想计算表中的行并按日期对它们进行分组。这些数据将在以后用于excel图表,因此如果结果还包括计数等于0的日期会更容易。
例如,执行
SELECT date, count(*)
FROM Table
GROUP BY date
ORDER BY 1
给了我
...
2013-01-01 5
2013-01-03 35
2013-01-04 57
2013-01-05 51
2013-01-07 50
2013-01-09 15
...
我想要的结果是
...
2013-01-01 5
2013-01-02 0
2013-01-03 35
2013-01-04 57
2013-01-05 51
2013-01-06 0
2013-01-07 50
2013-01-08 0
2013-01-09 15
...
有没有办法获得这样的结果,而无需创建一个包含所有日期的表格并将其与原始日期相结合,如果是,那么它是什么?
答案 0 :(得分:2)
您可以在创建表格时生成所需的所有日期。
如果您需要从2013年1月1日至今的所有日期,您可以使用以下查询:
select (SYSDATE - level) d1 from dual connect by level < (TRUNC(SYSDATE, 'DD') - DATE '2013-01-01')
然后使用外部联接
将其与您的表连接SELECT all_days.d1, SUM(CASE when table.date is null then 0 else 1 end)
FROM
( select (SYSDATE - level) d1
from dual
connect by level < (TRUNC(SYSDATE, 'DD') - DATE '2013-01-01')
) all_days
left outer join table on table.DATE = all_days.d1
GROUP BY all_days.d1
ORDER BY 1