如何按天填写分组数据?

时间:2017-04-01 08:15:21

标签: oracle oracle12c

从事件表中,我按日计算分组事件,为此我使用

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

我的问题是这只会返回这些天,某些事件在哪里

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天(当我的表中存在事件时事件计数) ...

怎么做?感谢您的帮助

1 个答案:

答案 0 :(得分:3)

因此,您可以从昨天起生成接下来的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