1

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

有没有办法获得这样的结果,而不必创建一个包含所有日期的表格并将其与原始日期连接起来,如果是这样,它是什么?

4

1 回答 1

2

您可以在不创建表格的情况下生成您需要的所有日期。

如果您需要从 1.1.2013 到今天的所有日期,您可以使用以下查询:

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
于 2013-08-22T07:42:31.427 回答