需求

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

表数据

table: hhh

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

想要的结果

id  name
4	hello
5	hello2
6	hello3
7	hello1

SQL

实现1

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大的数据:

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

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

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