Bạn cần tìm ngày mới nhất cho từng danh mục trong một truy vấn con, hãy nối truy vấn con này vào bảng của bạn và sắp xếp theo 3 trường:
SELECT p.* FROM products p
JOIN
( SELECT category_id, MAX(date) as category_date FROM products
GROUP BY category_id ) pg
ON p.category_id = pg.category_id
ORDER BY pg.category_date DESC, p.category_id, p.date DESC