Vous pouvez simuler la partitionné row_number en utilisant les variables utilisateur, puis limiter les lignes et appliquer group_concat:
Considérez le tableau suivant:
create table your_table (
id int primary key autoincrement,
category int,
value int
);
et des données:
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);
Et nous voulons est le top 3 (dans l'ordre du dernier identifiant) valeur par catégorie concaténée:
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;
Sortie:
category value_con
1 5,4,3
2 10,9,8
3 15,14,13
Voici une demo de cela.
augmentation valeur group_concat_max_len dans my.cnf – Omesh
peut être vous pouvez obtenir votre réponse ici http://stackoverflow.com/questions/3378324/limit-ignored-in-query-with-group-concat http://stackoverflow.com/questions/23608464/group-concat-with-limit –