2017-08-05 2 views
1

Ich habe eine Tabelle "Nachrichten", die einen Zeitstempel und Ereignisse als Zeichenfolgen enthält. Ich möchte anzeigen, wie viele verschiedene Ereignisse in den letzten 30 Tagen aufgetreten sind.Wählen Sie mehrere Spalten für jedes Datum

So soll die Ausgabe wie:

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 
... 

Wichtig ist, dass jeder Tag (auch, wenn kein Ereignis überhaupt auftreten) angezeigt werden.

Mein Code sieht so aus:

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 

Dies funktioniert nicht. Es fügt mehrere Tage für jedes Ereignis hinzu. Kannst du mir meinen Fehler zeigen? Vielen Dank!

Antwort

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

Funktioniert perfekt! Vielen Dank – user1482309

Verwandte Themen