확장 된 정렬 키 열
원하는 작업이 작동하지 않는 이유는 첫 번째 쿼리의 경우 다음 과 같은 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에 대해 자세히 블로그에 올렸습니다 .