如何按天填写分组数据?

How to fill out grouped data by day?

从事件 table 中,我得到按天分组的事件计数,为此我使用

SELECT event_date, COUNT(event_id) event_count FROM events
WHERE event_date >= TRUNC(SYSDATE-1, 'DD')
GROUP BY event_date
ORDER BY event_date

我的问题是这 returns 只是这几天,哪里有一些事件

2017-04-03 , 4
2017-04-05 , 2

但我需要获取从昨天到接下来的 30 天的所有连续天数,并从我的分组事件数据中填写这些天数,如下所示

2017-03-31 ,
2017-04-01 ,
2017-04-02 ,
2017-04-03 , 4
2017-04-04 ,
2017-04-05 , 2
2017-04-06 ,
...接下来的 30 天(当我的 table 中存在事件时,事件计数) ...

怎么做?感谢您的帮助

因此,您可以生成从昨天算起的接下来的 30 天(请参阅第一个子查询),然后简单地 left join 将其添加到您现有的查询中。

试试这个:

select  all_days.days  ,  certain_days.event_count from (
    select  TRUNC( sysdate + level - 2, 'DD') as days from DUAL connect by level <= 30
) all_days
left join (
    SELECT event_date, COUNT(event_id) event_count FROM events
    WHERE event_date >= TRUNC(SYSDATE-1, 'DD')
    GROUP BY event_date
) certain_days
on   all_days.days  =  certain_days.event_date
order by  all_days.days