विस्तारित सॉर्ट कुंजी कॉलम
कारण यह है कि आप जो काम नहीं करना चाहते हैं, वह 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 के बारे में ब्लॉग किया है ।