2012-04-11 4 views
4

Ich habe die folgende Tabelle mit den Nachrichten:Count-Nachrichten pro Tag vor und nach einer bestimmten Zeit und zeigen in einer resultset

+---------+---------+------------+----------+ 
| msg_id | user_id | _date  | _time | 
+-------------------+------------+----------+ 
| 1  | 1  | 2011-01-22 | 06:23:11 | 
| 2  | 1  | 2011-01-23 | 16:17:03 | 
| 3  | 1  | 2011-01-23 | 17:05:45 | 
| 4  | 2  | 2011-01-22 | 23:58:13 | 
| 5  | 2  | 2011-01-23 | 23:59:32 | 
| 6  | 3  | 2011-01-22 | 13:45:00 | 
| 7  | 3  | 2011-01-23 | 13:22:34 | 
| 8  | 3  | 2011-01-23 | 18:22:34 | 
+---------+---------+------------+----------+ 

Was ich will, für jeden Tag, um zu sehen, wie viele Nachrichten jeder Benutzer vor ausgesendet hat und NACH 16:00 Uhr. Ich mache das jetzt in zwei Schritten:

SELECT user_id, _date, COUNT(msg_id) AS cnt 
FROM messages WHERE _time <= '16:00' 
GROUP BY user_id, _date ORDER BY user_id, _date ASC 

user_id _date  cnt 
----------------------------- 
1  2011-01-22 1 
1  2011-01-23 0 
2  2011-01-22 0 
2  2011-01-23 0 
3  2011-01-22 1 
3  2011-01-23 1 

SELECT user_id, _date, COUNT(msg_id) AS cnt 
FROM messages WHERE _time > '16:00' 
GROUP BY user_id, _date ORDER BY user_id, _date ASC 

user_id _date  cnt 
----------------------------- 
1  2011-01-22 0 
1  2011-01-23 2 
2  2011-01-22 1 
2  2011-01-23 1 
3  2011-01-22 0 
3  2011-01-23 1 

(. In Wirklichkeit btw, die Zeilen mit Wert „0“ sind nicht in der Ergebnismenge gegeben Ich habe sie nur zur Klarstellung)

Ich möchte um diese beiden Ausgänge zu einem zu kombinieren:

user_id _date  before16 after16 
------------------------------------- 
1  2011-01-22 1   0 
1  2011-01-23 0   2 
2  2011-01-22 0   1 
2  2011-01-23 0   1 
3  2011-01-22 1   0 
3  2011-01-23 1   1 

Allerdings habe ich keine Ahnung, wie diese Abfrage geschrieben werden soll. Wenn Sie das tun, würde Ihre Hilfe geschätzt dies :-)

Antwort

4

Versuchen:

SELECT 
    user_id, 
    _date, 
    SUM(_time <= '16:00') AS before16, 
    SUM(_time > '16:00') AS after16 
FROM messages 
GROUP BY user_id, _date 
ORDER BY user_id, _date ASC 
+1

Dank Mann, das ist mein Tag. (bereits die GROUP BY selbst hinzugefügt :-) – Pr0no

Verwandte Themen