Този тип резултати се обработват най-добре от прозоречни функции в други RDBMS, но за съжаление Mysql няма никакви прозоречни функции, така че като алтернатива има решение да се използват потребителски дефинирани променливи за присвояване на ранг за редове, които принадлежат към същата група
SELECT `id`, `category`, `names`
FROM (
SELECT *,
@r:= CASE WHEN @g = category THEN @r + 1 ELSE 1 END rownum,
@g:=category
FROM test
CROSS JOIN(SELECT @g:=NULL ,@r:=0) t
ORDER BY category,id desc
) c
WHERE c.rownum <=2
Горната заявка ще ви даде 2 скорошни записа (въз основа на идентификатор) за категория, можете да промените последната част от заявката с клауза where на произволно число, за да покажете n резултата на група, например за да покажете 3 записа, след което WHERE c.rownum <= 3
и така нататък