Данные: (log_time имеет тип DATETIME
)
log_id | action | log_time | user
--------------------------------------------------
1 Processed 2011-02-28 16:38:48 1
2 Processed 2011-03-02 16:56:43 5
3 Processed 2011-03-02 17:00:17 5
4 Processed 2011-03-03 08:59:33 5
Запрос:
SELECT log_time, user
FROM logs
WHERE action = "Processed"
GROUP BY action
HAVING MAX(log_time)
Результат:
log_time | user
--------------------------
2011-02-28 16:38:48 1
Очевидно, это не такимея максимальное log_time на всех.Если я изменю запрос на ...
SELECT MAX(log_time), user
FROM logs
WHERE action = "Processed"
Тогда я, естественно, получу:
log_time | user
--------------------------
2011-03-03 08:59:33 1
Теперь данные, которые мне явно нужны, - это данные в строке 4: 3 марта,но пользователь 5. Я понимаю, что я могу получить это, выполнив простой SELECT ... ORDER BY log_time DESC LIMIT 1
.Но мой вопрос: что я делаю с этими MAX()
запросами, которые не верны?Мне показалось бы, что если бы я запустил запрос с HAVING MAX()
, это дало бы мне строку, которая, ну, в общем, имела максимум.Что я не понимаю о том, как MAX()
работает?
Редактировать: Чтобы уточнить мой вопрос, в основном, когда я вижу запрос ...
SELECT * FROM logs WHERE action = "Processed"
GROUP BY action HAVING MAX(log_time)
... мое предположение,в зависимости от того, как выглядит код, он извлекает строку с наибольшим временем log_time, когда обрабатывается действие.Это представляется ошибочным предположением.Что же тогда означает HAVING MAX()
? 1031 *