MySQL, где последнее действие не «остановить» - PullRequest
0 голосов
/ 10 марта 2011

У меня есть таблица, в которой хранятся имя пользователя, действие (остановка, запуск, пауза) и временная метка для действия.

Таким образом, столбцами являются userid, name, action и timestamp

Как получить активных пользователей.Т.е. пользователи, которые последним действием не были «стоп».

Больше признательности за помощь в построении запроса (вместо публикации того, который работает) и / или за указание меня в правильном направлении.

Ответы [ 3 ]

1 голос
/ 10 марта 2011

Вы должны создать оператор выбора, который группирует все данные по userid, и упорядочить его по максимуму timestamp - это даст вам последнее действие для пользователя (действие с наибольшим timestamp на группу).

теперь осталось только отфильтровать группы, для которых нет действия stop в качестве последнего действия.

  • СОВЕТ - поиск оператора HAVING в MySQL для фильтрующей части
1 голос
/ 10 марта 2011

Select последнее поле action означает совокупный запрос с max(timestamp) полем запроса.В этом случае вы не сможете выбрать другие поля из той же записи, для которой timestamp = max(timestamp), потому что не разрешено агрегировать поля запроса без функции агрегирования.

Так что вам нужен своего рода подзапросвыбрать время последнего действия пользователя.Кроме того, вы сможете join с ним только timestamp и userid.

Теперь перейдем к запросу:

select actions.userid, actions.action
from actions
  inner join (select max(timestamp) timestamp, userid from actions group by userid) lastActions
    on actions.userid = lastActions.userid and actions.timestamp = lastActions.timestamp
where actions.action != 'stop'
0 голосов
/ 10 марта 2011

Я уверяю, что трудности возникают, потому что у пользователя может быть много действий:

1, mjuaji, стоп, 00002323

1, mjuaji, старт, 00002324

1, mjuaji, пауза, 00002325

мм, чтобы указать вам правильное направление:

Вы могли бы начать думать о , как сначала выбрать последнее действие каждого пользователя .попробуйте сгруппировать, агрегировать операторы (max, min ...)

и посмотреть, не является ли последнее действие "стопом".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...