Bạn có thể mô phỏng các phân vùng row_number sử dụng các biến dùng và sau đó hạn chế dòng và áp dụng group_concat:
xem xét bảng sau:
create table your_table (
id int primary key autoincrement,
category int,
value int
);
và dữ liệu:
insert into your_table (category, value)
values
(1, 1), (1, 2), (1, 3), (1, 4), (1, 5),
(2, 6), (2, 7), (2, 8), (2, 9), (2, 10),
(3, 11), (3, 12), (3, 13), (3, 14), (3, 15);
Và chúng tôi muốn là giá trị 3 hàng đầu (theo thứ tự id mới nhất) cho mỗi danh mục được ghép nối:
select category,
group_concat(value order by id desc) as value_con
from (
select t.*,
@rn := if(@category = category, @rn + 1, if(@category := category,1, 1)) as seqnum
from your_table t
cross join (select @category := null, @rn := 0) x
order by t.category, t.id desc
) t
where seqnum <= 3
group by category;
Output:
category value_con
1 5,4,3
2 10,9,8
3 15,14,13
Đây là một demo về điều này.
tăng group_concat_max_len giá trị trong my.cnf – Omesh
có thể bạn có thể nhận được câu trả lời của bạn ở đây http://stackoverflow.com/questions/3378324/limit-ignored-in-query-with-group-concat http://stackoverflow.com/questions/23608464/group-concat-with-limit –