2012-04-11 5 views
4

で一定の時間とショーの後、私はメッセージで、次の表を持っている:私が欲しいものカウント前日あたりのメッセージと1つの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 | 
+---------+---------+------------+----------+ 

は、各ユーザーが前に送信されたメッセージの数を確認するために、それぞれの日のためにあります16:00以降。私は今、二段階で次の操作を行います。

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 

(実際には、ところで、「0」の値を持つ行が結果セットに与えられていない、私はちょうど明確化のためにそれらを追加しました。)

を私は希望します

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 

しかし、私はこのクエリを書く方法について考えていません。そうした場合、あなたの助けが

答えて

4

:-)いただければ幸い、これを試してみてください:

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

感謝の男を、これが私の一日行わ。 (すでにGROUP BYを自分自身に追加しました:-) – Pr0no

関連する問題