以下是固定的寫法,實現其他邏輯按這個套路寫就好,將字段替換成你想分組查詢的字段即可
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;