Bien, he revisado la sintaxis que te propongo, y cumple exactamente con lo buscado.
Me explico:
La consulta interior genera una tabla virtual con todos los registros ordenados por fecha en forma descendente (del más reciente al más viejo). Esta tabla debe ir encerrada entre paréntesis para ser usada como tabla de origen de la consulta exterior; pero como la tabla resultado es lo que se denomina "tabla derivada", entonces debe ir llevar un alias, para ser usada en el FROM de la consulta exterior. De allí el alias "T1".
La consulta exterior simplemente toma ese resultado y agrupa por categoría.
La sentencia, tal y como está puesta no tiene errores de sintaxis. Ya la probé.
En ese sentido, hay sólo dos posibilidades:
1) Un error al copiar la sentencia. No puedo saberlo si no posteas una
copia de lo que usaste.
2) Estás usando una versión muy vieja de MySQL. No puedo saberlo, si no me dices cuál versión de MySQL usas.
De todos modos, mirado con cuidado lo que pides al final, te propongo esta alternativa: