Colunas-chave de classificação estendida
O motivo pelo qual o que você deseja fazer não funciona é a ordem lógica das operações em SQL , que, para sua primeira consulta, é (simplificada):
FROM MonitoringJob
SELECT Category, CreationDate
ou seja, adicione a chamada coluna de chave de classificação estendida
ORDER BY CreationDate DESC
SELECT Category
ou seja, remova a coluna de chave de classificação estendida novamente do resultado.
Portanto, graças ao recurso de coluna-chave de classificação estendida do padrão SQL , é totalmente possível ordenar por algo que não está na SELECT
cláusula, porque está sendo adicionado temporariamente a ele nos bastidores.
Então, por que isso não funciona com DISTINCT
?
Se adicionarmos a DISTINCT
operação, ela será adicionada entre SELECT
e ORDER BY
:
FROM MonitoringJob
SELECT Category, CreationDate
DISTINCT
ORDER BY CreationDate DESC
SELECT Category
Mas agora, com a coluna de chave de classificação estendida CreationDate
, a semântica da DISTINCT
operação foi alterada, portanto, o resultado não será mais o mesmo. Isso não é o que queremos, portanto, o padrão SQL e todos os bancos de dados razoáveis proíbem esse uso.
Soluções Alternativas
Pode ser emulado com a sintaxe padrão da seguinte maneira
SELECT Category
FROM (
SELECT Category, MAX(CreationDate) AS CreationDate
FROM MonitoringJob
GROUP BY Category
) t
ORDER BY CreationDate DESC
Ou, simplesmente (neste caso), como mostrado também por Prutswonder
SELECT Category, MAX(CreationDate) AS CreationDate
FROM MonitoringJob
GROUP BY Category
ORDER BY CreationDate DESC
Eu tenho um blog sobre SQL DISTINCT e ORDER BY mais detalhadamente aqui .