为每个日期选择多个列

时间:2017-08-05 19:28:17

标签: mysql select

我有一张桌子'消息'它将时间戳和事件保存为字符串。我想显示过去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

这不起作用。它为每个活动增加了多天。你能指出我的错误吗?谢谢!

1 个答案:

答案 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