2010-04-03 15 views
6

में परिणाम हैं I शीर्ष शीर्ष रिकॉर्ड प्राप्त करने का प्रयास कर रहे हैं (जब कुछ कॉलम एक्स द्वारा आदेश दिया गया है), लेकिन परिणाम रिवर्स ऑर्डर में सेट है। निम्नलिखित बयान ग़लत है, लेकिन शायद यह दर्शाता है कि मैं क्या कर रहा हूँ के बाद:एक्स द्वारा आदेशित शीर्ष एन रिकॉर्ड्स का चयन करें, लेकिन रिवर्स ऑर्डर

SELECT * FROM (SELECT TOP 10 * FROM FooTable ORDER BY X DESC) ORDER BY X ASC 

उदाहरण के लिए, स्तंभ एक्स एक आईडी या एक टाइमस्टैम्प हो सकता है; मैं नवीनतम 10 रिकॉर्ड चाहता हूं लेकिन उन्हें आगे क्रमिक क्रम में लौटा देना चाहता हूं।

+1

क्यों नहीं 'टॉप 10 * द्वारा एक्स ASC' FooTable आदेश से चयन? – Dor

+0

@ डोर क्योंकि मुझे नवीनतम 10 रिकॉर्ड मिलेंगे, लेकिन वे रिवर्स क्रोनोलॉजिकल ऑर्डर में वापस आ जाएंगे। –

उत्तर

9
SELECT * FROM 
    (SELECT TOP 10 * FROM FooTable ORDER BY X DESC) as myAlias 
ORDER BY X ASC 

यानी आपको अपने सबक्वायरी पर उपनाम की आवश्यकता हो सकती है, लेकिन इसके अलावा इसे काम करना चाहिए।

+0

अच्छा, धन्यवाद। हालांकि मुझे काफी कुछ नहीं मिलता है कि एसक्यूएल एक उपनाम क्यों मांगता है जब क्वेरी में कहीं और इसका कोई संदर्भ नहीं होता है। –

2

SELECT * FROM 
(SELECT TOP 10 * FROM FooTable ORDER BY X DESC) temp --alias 
ORDER BY X 

या एक आम तालिका अभिव्यक्ति (CTE) BY खंड

WITH Temp AS (SELECT TOP 10 * FROM FooTable ORDER BY X DESC) 

SELECT * FROM temp 
ORDER BY X 
1

आदेश से प्रयास करें परिणाम एक निर्दिष्ट स्तंभ द्वारा निर्धारित ऑर्डर करने के लिए प्रयोग किया जाता है।

आपकी क्वेरी Select TOP 10 * from FooTable ORDER BY X DESC मानते हुए एक्स एक्स टाइमस्टैम्प है, हाल ही में डाली गई 10 पंक्तियों को वापस नहीं जा रहा है। यह डेटाबेस में शीर्ष 10 पंक्तियों को संग्रहीत (किसी भी क्रम में) के रूप में वापस कर देगा, और फिर 10 ऐसी पंक्तियों के परिणाम सेट को अवरोही क्रम में वापस कर देगा। इसलिए अपने सबक्वेरी

Select TOP 10 * from (Select * from FooTable ORDER BY DESC) as T

यह करने के लिए संशोधित किया जाना चाहिए अपने पहले की आवश्यकता को पूरा करना चाहिए। फिर आप अपने अंतिम सॉर्ट ऑर्डर का निर्णय लेने के लिए इस परिणाम सेट को उपनाम के रूप में उपयोग कर सकते हैं।

मुझे आशा है कि मैं तुम्हें सही ढंग से समझ लिया है, जब आप कहते हैं कि "मैं (जब कुछ स्तंभ एक्स द्वारा आदेश दिया) शीर्ष N रिकॉर्ड प्राप्त करने के लिए कोशिश कर रहा हूँ"

0

सभी गैर के लिए इस सवाल का एक वैकल्पिक समाधान शीर्ष कीवर्ड के लिए समर्थित संस्करण LIMIT का उपयोग करना है। उदाहरण: -

SELECT * FROM 
    (SELECT * FROM FooTable ORDER BY X DESC LIMIT 10) as myAlias 
ORDER BY X ASC 
संबंधित मुद्दे