我有一个表,用于存储用户名、操作(停止、开始、暂停)和操作时间戳。
因此,列是 userid
、name
、action
和 timestamp
如何获得活跃用户。 IE。最后操作不是“停止”的用户。
更感谢您帮助我构建查询(而不是发布有效的查询)和/或为我指明正确的方向。
最佳答案
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'
关于MySQL 最后一个操作不是 'stop',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5260590/