需求

获取分组后每组数据中,ID最大的数据

表数据

table: hhh

1
2
3
4
5
6
7
8
9
id name
1 hello
2 hello1
3 hello2
4 hello
5 hello2
6 hello3
7 hello1

想要的结果

1
2
3
4
5
id name
4 hello
5 hello2
6 hello3
7 hello1

SQL

实现1

1
2
3
select * from hhh where id in (
SELECT substring_index(group_concat(id order by id desc SEPARATOR ','),",",1) from hhh GROUP BY name
);

这个比较灵活,可以在group by 后,再按结果集里的再进行自己想要的字段排序等。

这个可以自由实现获取分组后,第N大的数据。比如,分组后,第N大的数据:

1
2
3
select * from hhh where id in (
SELECT substring_index(substring_index(group_concat(id order by id desc SEPARATOR ','),",",N), ",",-1) from hhh GROUP BY name
);

N改为你自己想要的数字即可.

实现2

1
2
3
SELECT * from hhh WHERE id in (
select max(id) from hhh GROUP BY name
);

这种只能实现最大,或者最小。