在Oracle中按日期分组时获取每行计数结果

时间:2013-08-22 07:24:05

标签: oracle calendar

我想计算表中的行并按日期对它们进行分组。这些数据将在以后用于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
...

有没有办法获得这样的结果,而无需创建一个包含所有日期的表格并将其与原始日期相结合,如果是,那么它是什么?

1 个答案:

答案 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