Ключевые столбцы расширенной сортировки
Причина, по которой то, что вы хотите сделать, не работает, заключается в логическом порядке операций в SQL , который для вашего первого запроса (упрощенно):
FROM MonitoringJob
SELECT Category, CreationDate
т.е. добавить так называемый расширенный ключевой столбец сортировки
ORDER BY CreationDate DESC
SELECT Category
т.е. снова удалите столбец расширенного ключа сортировки из результата.
Таким образом, благодаря стандартной функции расширенного ключевого столбца сортировки SQL , можно полностью упорядочить то, чего нет в SELECT
предложении, потому что оно временно добавляется к нему за кулисами.
Итак, почему это не работает DISTINCT
?
Если мы добавим DISTINCT
операцию, она будет добавлена между SELECT
и ORDER BY
:
FROM MonitoringJob
SELECT Category, CreationDate
DISTINCT
ORDER BY CreationDate DESC
SELECT Category
Но теперь, с расширенным ключевым столбцом сортировки CreationDate
, семантикаDISTINCT
операции была изменена, поэтому результат больше не будет прежним. Это не то, что мы хотим, поэтому и стандарт SQL, и все разумные базы данных запрещают такое использование.
обходные
Его можно эмулировать с помощью стандартного синтаксиса следующим образом
SELECT Category
FROM (
SELECT Category, MAX(CreationDate) AS CreationDate
FROM MonitoringJob
GROUP BY Category
) t
ORDER BY CreationDate DESC
Или просто (в данном случае), как показал также Прутсвондер
SELECT Category, MAX(CreationDate) AS CreationDate
FROM MonitoringJob
GROUP BY Category
ORDER BY CreationDate DESC
Я подробно писал о SQL DISTINCT и ORDER BY здесь .