Как закодировать этот SELECT устав? - PullRequest
0 голосов
/ 19 июня 2011

Учитывая эту таблицу:

mysql> describe activity;
+---------------------------+-------------+------+-----+---------+-------+
| Field                     | Type        | Null | Key | Default | Extra |
+---------------------------+-------------+------+-----+---------+-------+
| user_id                   | varchar(16) | NO   |     | NULL    |       |
| login_time                | int(11)     | NO   |     | NULL    |       |
| last_activity_time        | int(11)     | NO   |     | NULL    |       |
| last_activity_description | text        | YES  |     | NULL    |       |
| logout_time               | int(11)     | NO   |     | NULL    |       |
+---------------------------+-------------+------+-----+---------+-------+
5 rows in set (0.01 sec)

Я хочу выбрать самую последнюю last_activity_time (стандартную метку времени Unix) для каждого пользователя, который вошел в систему (то есть имеет одну или несколько строк, где logout_time - этоне zer0).

Я пытался

SELECT user_id, login_time, MAX(last_activity_time) 
  FROM activity  
 WHERE logout_time="0"; 

... но нашел только одну запись, в которую вошли два пользователя, вероятно, потому что я выбираю для MAX(last_activity_time)

То, что я хочу, - это что-то вроде

SELECT all unique user_ids  
  SELECT each of those which has one or more entries where `logout_time` != 0  
     SELECT the maximum value of `logout_time` for each of those

в одном единственном операторе SELECT.Как я могу это сделать?

1 Ответ

3 голосов
/ 19 июня 2011
SELECT user_id, MAX(logout_time)
FROM activity 
WHERE logout_time <> "0" 
GROUP BY user_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...