Bạn có thể thử cái này không? Bạn có thể kiểm tra tại đây http://www.sqlfiddle.com/#!2/57967 / 12 .
Select grp_new, group_concat(ord)
From (
Select ord, if(grp = @prev, @seq, @seq := @seq + 1) as seq,
if(grp = @prev, grp, @prev := grp) as grp_new
From tab, (SELECT @seq := 0, @prev := '') AS init
Order by ord
) x
Group by grp_new, seq;
Ý tưởng chính là tạo cùng một seq
cho cùng một nhóm liên tiếp như sau.
Select
ord, if(grp = @prev, @seq, @seq := @seq + 1) as seq,
if(grp = @prev, grp, @prev := grp) as grp_new
From tab, (SELECT @seq := 0, @prev := '') AS init
Order by ord
rồi cuối cùng nhóm GROUP BY grp, seq
có thể phân biệt từng nhóm liên tiếp ngay cả khi chúng có cùng grp
.
CHỈNH SỬA:Để nhận chính xác kết quả trong ví dụ:
Select grp_new, group_concat(ord order by ord)
From (
Select ord, if(grp = @prev, @seq, @seq := @seq + 1) as seq,
if(grp = @prev, grp, @prev := grp) as grp_new
From tab, (SELECT @seq := 0, @prev := '') AS init
Order by ord
) x
Group by seq