Genişletilmiş sıralama anahtarı sütunları
Yapmak istediğiniz şeyin işe yaramamasının nedeni, ilk sorgunuz için (basitleştirilmiş) olan SQL'deki mantıksal işlem sırası yüzündendir :
FROM MonitoringJob
SELECT Category, CreationDate
yani, sözde bir genişletilmiş sıralama anahtarı sütunu ekleyin
ORDER BY CreationDate DESC
SELECT Category
yani sonuçtan genişletilmiş sıralama anahtarı sütununu tekrar kaldırın .
Dolayısıyla, SQL standart genişletilmiş sıralama anahtarı sütun özelliği sayesinde, SELECT
cümlecikte olmayan bir şeye göre sıralama yapmak tamamen mümkündür , çünkü geçici olarak sahne arkasına eklenmektedir.
Peki bu neden işe yaramıyor DISTINCT
?
DISTINCT
İşlemi eklersek, SELECT
ve arasına eklenecektir ORDER BY
:
FROM MonitoringJob
SELECT Category, CreationDate
DISTINCT
ORDER BY CreationDate DESC
SELECT Category
Ama şimdi, genişletilmiş sıralama anahtarı sütunu CreationDate
ile DISTINCT
işlemin anlamı değiştirildi, dolayısıyla sonuç artık aynı olmayacak. İstediğimiz bu değil, dolayısıyla hem SQL standardı hem de tüm makul veritabanları bu kullanımı yasaklıyor.
Geçici Çözümler
Aşağıdaki gibi standart sözdizimi ile öykünebilir
SELECT Category
FROM (
SELECT Category, MAX(CreationDate) AS CreationDate
FROM MonitoringJob
GROUP BY Category
) t
ORDER BY CreationDate DESC
Veya sadece (bu durumda), Prutswonder tarafından da gösterildiği gibi
SELECT Category, MAX(CreationDate) AS CreationDate
FROM MonitoringJob
GROUP BY Category
ORDER BY CreationDate DESC
Burada SQL DISTINCT ve ORDER BY hakkında daha detaylı blog yazdım .