2011-10-12 28 views
10

उदाहरण के लिए, अपने डेटा इस तरह दिखेगा यदि:एसक्यूएल: चयन एन "हाल ही में" आरोही क्रम में पंक्तियों

 
timestamp | message 
100 | hello 
101 | world 
102 | foo 
103 | bar 
104 | baz 

मैं तीन सबसे हाल पंक्तियों का चयन कैसे कर सकते हैं - 102, 103, 104 - आरोही आदेश?

स्पष्ट (मेरे लिए) … LIMIT 3 ORDER BY timestamp DESC सही पंक्तियां वापस कर देगा लेकिन आदेश गलत है।

+1

आप शीर्षक में अवरोही क्रम में पंक्तियों के लिए कहा, और सवाल है, कर रहे हैं, जिसमें _ascending_ आदेश आप क्या ढूंढ रहे हैं? – jsvk

+1

डी ओह! धन्यवाद। मैं आरोही चाहता हूँ। फिक्स्ड। –

उत्तर

14

उपयोग एक आंतरिक सही पंक्तियों का चयन करने के लिए चयन करें, और उन्हें सही ढंग से ऑर्डर करने के लिए एक बाहरी का चयन:

SELECT timestamp, message 
FROM 
(
    SELECT * 
    FROM your_table 
    ORDER BY timestamp DESC 
    LIMIT 3 
) T1 
ORDER BY timestamp 
+0

एचआरएम ... मेरे पास पोस्टग्रेज़ का एक चलने वाला उदाहरण आसान नहीं है, लेकिन SQLite के 'EXPLAIN' से पता चलता है कि परिणामस्वरूप एक प्रकार (दो कॉलम अनुक्रमित नहीं किया जाएगा)। क्या इस अनावश्यक प्रकार से बचा जा सकता है? –

+2

नहीं; एसक्यूएल में "रिवर्स" ऑपरेशन नहीं है। लेकिन शायद वह भाषा जिसमें आप परिणाम खींच रहे हैं? –

+1

@ डेविड: रुको, क्या आप * तीन * रिकॉर्ड सॉर्ट करने पर परेशान हैं? ;) –

संबंधित मुद्दे