Розширені сортування ключових стовпців
Причина того, що те, що ви хочете зробити, не працює, полягає в логічному порядку операцій у 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
Або просто просто (в даному випадку), як показав також Prutswonder
SELECT Category, MAX(CreationDate) AS CreationDate
FROM MonitoringJob
GROUP BY Category
ORDER BY CreationDate DESC
Я детальніше розмістив тут повідомлення про SQL DISTINCT та ORDER BY .