MySQL 分组查询最新数据

/ 数据库 / 0 条评论 / 278浏览

最近接到一个开发任务,有一个用户操作日志表, 里面包含用户id, 用户最近访问内容和时间. 需要查询到用户列表中每一个用户最近操作的内容

我开始想到的是使用 group by 分组, 然后 order by 时间字段. 但是由于MySQL的执行顺序是先执行 group 后执行 order, 经过group之后的内容已经丢失了时间, 所以无法使用该方法实现. 然后在网上找到一种方式, 是通过 right join 自己, 然后取内容. 但是也比较复杂, 后来找到了一个方式比较简单, 在此记录备忘.

其主要逻辑使用了not exists, 然后通过子查询拿到最新数据, 通过 WHERE t1.user_id = t2.user_id 建立关联, 其中user_id即为两表之间的关联字段.

SELECT
	user_id,
	t1.login_time 
FROM
	tb_user_login t1 
WHERE
	NOT EXISTS ( SELECT 1 FROM tb_user_login t2 WHERE t1.user_id = t2.user_id AND t1.login_time < t2.login_time )

对应的表数据如下: 数据库表内容

查询出来的结果如下: 查询结果

更新

上面的那种方式有严重的性能问题, 执行一次查询竟然要0.4S, 后来在知乎找到了这篇问题,下面 有挺多方式解决这个问题的。 知乎链接