2017-08-05 44 views
1

我有一個表'消息',其中包含時間戳和事件作爲字符串。我想要顯示過去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
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 
+0

作品完美!謝謝 – user1482309