以下是固定的写法,实现其他逻辑按这个套路写就好,将字段替换成你想分组查询的字段即可
rank跟row_number()一样,过滤分组排序后的数据
SELECT id, name, create_time, rank
FROM (
SELECT b.id, b.name, b.create_time
, @rownum := @rownum + 1
, IF(@pdept = b.bar_code, @rank := @rank + 1, @rank := 1) AS rank
, @pdept := b.bar_code
FROM (
SELECT id, name, create_time FROM tablename
GROUP BY id,name
ORDER BY id, name
) b, (
SELECT @rownum := 0, @pdept := ''
, @rank := 0
) c
) result
HAVING rank < 2;