Columnas de clave de clasificación extendidas
La razón por la que lo que quiere hacer no funciona es por el orden lógico de las operaciones en SQL , que, para su primera consulta, es (simplificado):
FROM MonitoringJob
SELECT Category, CreationDatees decir, agregue una columna de clave de clasificación extendida
ORDER BY CreationDate DESC
SELECT Categoryes decir, elimine la columna de clave de clasificación extendida nuevamente del resultado.
Por lo tanto, gracias a la función de columna de clave de ordenación extendida estándar de SQL , es totalmente posible ordenar por algo que no está en la SELECTcláusula, porque se está agregando temporalmente detrás de escena.
Entonces, ¿por qué no funciona esto DISTINCT?
Si sumamos la DISTINCToperación, se sumaría entre SELECTy ORDER BY:
FROM MonitoringJob
SELECT Category, CreationDate
DISTINCT
ORDER BY CreationDate DESC
SELECT Category
Pero ahora, con la columna de clave de ordenación extendida CreationDate , DISTINCTse ha cambiado la semántica de la operación, por lo que el resultado ya no será el mismo. Esto no es lo que queremos, por lo que tanto el estándar SQL como todas las bases de datos razonables prohíben este uso.
Soluciones alternativas
Se puede emular con la sintaxis estándar de la siguiente manera
SELECT Category
FROM (
SELECT Category, MAX(CreationDate) AS CreationDate
FROM MonitoringJob
GROUP BY Category
) t
ORDER BY CreationDate DESC
O simplemente (en este caso), como también lo muestra Prutswonder
SELECT Category, MAX(CreationDate) AS CreationDate
FROM MonitoringJob
GROUP BY Category
ORDER BY CreationDate DESC
He escrito en un blog sobre SQL DISTINCT y ORDER BY más en detalle aquí .