Я бы предположил, что вы также захотите это по дням, если он охватывает несколько дней, в противном случае max () на час может дать вам что-то за неделю назад с одним часом против трех дней назад с другим, а текущий день с еще один ... Это все, если вы вышли за рамки своего предложения WHERE, конкретно ограничивающего ваш диапазон одного дня. Это не конкретный пользователь, которого вы хотите, но кто бы ни занимался последними действиями в течение этого часа ... мог быть одним и тем же человеком, каждый раз мог быть совершенно другим. Я использую конкретную дату как часть моего группового теста на тот случай, если вы когда-нибудь захотите охватить диапазон дат, но вы также можете его убрать ...
select STRAIGHT_JOIN
ui.userid,
ui.username,
ui.date_created
from
( select
date( date_created ),
hour( date_created ),
max( date_created ) as LastPerHour
from
user_accounts
where
date( date_created ) = '2009-10-27'
group by
date( date_created),
hour( date_created )) PreQuery
join user_accounts ui
on PreQuery.LastPerHour = ui.date_created
Опять же, я также включил дату в качестве группировки, если вы хотите охватить несколько дней, просто убедитесь, что ваша таблица имеет индекс для date_created самостоятельно ... или хотя бы в первой позиции индекса.