Учитывая эту таблицу:
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.Как я могу это сделать?