Można symulować podzielono ROW_NUMBER pomocą zmiennych użytkownika, a następnie ograniczyć wiersze i zastosować group_concat:
Rozważmy następującą tabelę:
create table your_table (
id int primary key autoincrement,
category int,
value int
);
i dane:
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);
I chcemy jest górą 3 (w kolejności ostatniego id) wartość na kategorię konkatenacji:
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;
wyjściowa:
category value_con
1 5,4,3
2 10,9,8
3 15,14,13
Oto demo tego.
wzrost group_concat_max_len wartość w my.cnf – Omesh
może być można uzyskać tutaj odpowiedzi http://stackoverflow.com/questions/3378324/limit-ignored-in-query-with-group-concat http://stackoverflow.com/questions/23608464/group-concat-with-limit –