Как выбрать 5 последних строк из каждой категории?

Один из вариантов:

SET @i := 0, @category_id := 0, @n := 5;
SELECT * FROM (SELECT * FROM articles ORDER BY category_id ASC, id DESC) AS q WHERE (IF (@category_id = q.category_id, @i := @i + 1, (@category_id := q.category_id) AND (@i := 1)) <= @n - 1)