Розширені сортування ключових стовпців
Причина того, що те, що ви хочете зробити, не працює, полягає в логічному порядку операцій у 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 .