如何按天填写分组数据?
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
从事件 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