我有一张桌子'消息'它将时间戳和事件保存为字符串。我想显示过去30天内发生了多少不同的事件。
所以输出应该是:
date event_1 event_2
...
2017-08-01 4 0
2017-08-02 0 0
2017-08-03 5 3
2017-08-04 0 2
...
重要的是,每天都会显示(即使根本没有发生任何事件)。
我的代码如下:
SELECT distinct(DATE(MESSAGE.DATEFIELD)) as 'date',
IF(MESSAGE.EVENT = 'event_1', COUNT(MESSAGE.ID), 0) AS 'event 1',
IF(MESSAGE.EVENT = 'event_2', COUNT(MESSAGE.ID), 0) AS 'event 2'
FROM MESSAGE
WHERE DATE(MESSAGE.DATEFIELD) >= DATE(NOW()) - INTERVAL 30 DAY
GROUP BY date, MESSAGE.EVENT
这不起作用。它为每个活动增加了多天。你能指出我的错误吗?谢谢!
答案 0 :(得分:1)
select DATEFIELD,
count(case when EVENT = 'event_1' then 1 end) AS 'event 1',
count(case when EVENT = 'event_2' then 1 end) AS 'event 2'
from message
WHERE DATE(MESSAGE.DATEFIELD) >= DATE(NOW()) - INTERVAL 30 DAY
group by DATEFIELD