一个用户日志表,每个用户都有多条记录,获取每个用户最后的一条记录,怎么做查询过滤,用group by过滤后得到的是最早的记录

有一个用户日志表,每个用户都有多条记录,现在要获取每个用户最后的那条记录,如果用 group by uid 的话,得到的是最早的那条记录,要得到最后的记录,要如何进行过滤,一直没合适方法。

表结构(id 是主键):
id uid log
1 1 log11
2 1 log22
3 3 log33
4 2 log44
5 2 log55
6 1 log66
7 3 log77
8 2 log88
9 1 log99

需要的结果是:
3 log77
2 log88
1 log99

用 group by uid 得到的结果是:
4 2 log44
3 3 log33
1 1 log11
都是最早的记录

如果要获取每个用户最后的一条记录,怎么修改查询方法呢?

阅读 13.4k
3 个回答

没有排序没有聚合函数当然只能取到第一条记录了
给你两个sql
select id,uid,log from (select * from user order by uid,id desc) aa group by uid;
select * from user where id in (select max(id) from user group by uid);

先把日志的最后一条排序到前面,在根据uid分组

参考我的文章
select a.* from cat a inner join (select cat_id, max(value) value from cat group by cat_id) b on a.cat_id= b.cat_id and a.value= b.value order by a.cat_id;

推荐问题
宣传栏