Loại kết quả này được xử lý tốt nhất bởi các hàm cửa sổ trong RDBMS khác nhưng tiếc là Mysql không có bất kỳ hàm cửa sổ nào, vì vậy, để thay thế, có một giải pháp sử dụng các biến do người dùng xác định để chỉ định thứ hạng cho các hàng thuộc cùng một nhóm
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
Truy vấn trên sẽ cung cấp cho bạn 2 bản ghi gần đây (trên cơ sở id) cho mỗi danh mục, bạn có thể thay đổi phần cuối cùng của truy vấn với mệnh đề where thành bất kỳ số nào để hiển thị n kết quả cho mỗi nhóm, ví dụ hiển thị 3 bản ghi thì WHERE c.rownum <= 3
và tiếp tục như vậy