mysql 分组查询获取每组的最大值-两种情况

2 篇文章 0 订阅
部门id(b_code)最近登录时间(update)用户id(u_code)
416170189111
316170389142
216170289153
216170484144
416170589175
116170789186
216170189217

 

表i_user,其中用户id主键

情况一:按照部门分组,查询出部门中用户id最大的一列

select * from i_user  where u_code in(select max(u_code) from i_user GROUP BY b_code) ORDER BY b_code;

结果:

情况二:查询每个部门最近的登陆(刷新时间最大)用户

由于更新时间存在重复值,所以上面方法就不可行了。我们这里要用到mysql两个好玩的函数,GROUP_CONCATSUBSTRING_INDEX

select * from i_user where u_code in (select SUBSTRING_INDEX(GROUP_CONCAT(u_code ORDER BY `update` desc), ',', 1 ) from i_user GROUP BY b_code)  ORDER BY b_code;

结果:

完毕!

扩展:

上诉方法属于我们很常考虑的mysql查询方式,其实还有一种相对来说不走寻常路的方法,我们可以使用自定义变量的方式来处理。

SET @tmpBuCode = "";
SET @rank = 1;
SELECT b_code,`update`,u_code
FROM 
(
select b_code,`update`,u_code,
IF(@tmpBuCode = b_code, @rank:=@rank + 1, @rank:=1) as new_rank,
@tmpBuCode := b_code AS tmpBuCode
from (SELECT * FROM i_user ORDER BY b_code, `update` DESC) tn_a
) tb where new_rank <= 1;

这种方式就不需要考虑是否是唯一健值的因素了,而且他还能很好的完成分组查询出前n条记录的功能!

参考链接:https://blog.csdn.net/qq_33191599/article/details/106188598?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allfirst_rank_v2~rank_v25-5-106188598.nonecase

  • 7
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值