需求分析:多行数据分组排序之后,如何获取第一行数据?具体案例如下:
根据要求查询结果:
- 查询结果username不能重复;
- username重复的选择条件是status为1则选择该条,多个1则按照createtime选取最近的一条;
- status都为0,根据createtime选择最新的一条;
按照上述要求,筛选出来的结果应为红色框选的结果。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190225230802569.png
MySQL的解决方法如下:
select
substring_index(group_concat(userid order by status desc, createtime desc),',',1) as userid,
username,
substring_index(group_concat(status order by status desc, createtime desc),',',1) as status,
substring_index(group_concat(createtime order by status desc, createtime desc),',',1) as createtime
from sysuser group by username;
使用了group_concat()和substring_index()两个函数的结合。
group_concat():根据group by分组和排序参数之后,将字段使用‘,’连接起来;
substring_index():使用‘,’分割,而后取第一个元素。