SQL GROUP BY聚合操作时如何保留其中一条数据

x33g5p2x  于2020-08-25 发布在 Mysql  
字(0.6k)|赞(0)|评价(0)|浏览(2693)

在对数据进行GROUP BY聚合操作时,有时会保留其中一条数据的部分数据。比如现在有一张用户信息表(user):

ID(id)用户编号(user_id)用户名称(user_name)修改时间(modify_time)用户状态(status)
110000张三2019-10-111
210000张三2019-12-121
310000张三2020-5-221
410001李四2019-8-81
510001李四2019-11-211

对用户信息进行更新时,都会重新新增一条记录。每个用户信息都有多条数据,而最后更新的一条为最新的数据。
在查询用户列表时,我们会对用户编号进行聚合GROUP BY,并选取最新的一条的部分数据最为查询结果。

方案一

先查询每个用户的最大ID集合,然后再通过IN 查询用户详情信息。

select *
from user
where id in (
	select max(id)
	from user
	group by user_id
)

这种方案只能查询 最大和最小 的数据。

方案二

在每个聚合集合中添加一个编号字段。

select *
from (
	select *, row_number() OVER (PARTITION by user_id order by modify_time desc) as rownum
	from user
) t
where rownum = 1

相关文章

最新文章

更多