2010-05-17 7 views

उत्तर

41
Select col1,col2 
from 
as400table 
where col1='filter' 
order by col1 
fetch first N row only 

एक ORDER BY खंड सेट करना न भूलें के खिलाफ एक

Select top N * from as400table 

प्रकार क्वेरी निष्पादित करते एसक्यूएल कैसे करना है, क्योंकि डीबी 2 गारंटी नहीं देता है कि FETCH FIRST N ROW ONLY द्वारा लौटाई गई पंक्तियां हमेशा एक ही एन

10

कड़ाई से, डीबी 2 में शीर्ष एन के बराबर नहीं है।

SELECT 1 FROM sysibm.sysdummy1 
    WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1) 
FETCH FIRST ROW ONLY 

compiles और चलाता है, लेकिन

SELECT 1 FROM sysibm.sysdummy1 
    WHERE EXISTS (SELECT 2 FROM sysibm.sysdummy1 FETCH FIRST ROW ONLY) 

संकलन नहीं होंगे।

TOP N और FETCH FIRST N समान नहीं हैं। आप केवल FETCH FIRSTप्रति प्रश्न पर उपयोग कर सकते हैं, जबकि किसी भी उप-चयन में उपयोग किया जा सकता है।

आप TOP N अनुकरण करने के लिए एक उप क्वेरी में एक खिड़की समारोह का उपयोग कर सकते हैं:

select * 
from (
    select id, row_number() 
    over (order by id) as rn 
    from testsch.testtbl 
) as r 
where r.rn < 100 -- This is N rows you are looking for 

यह ठीक 99 पंक्तियों वापस आ जाएगी। मैंने कोशिश की कि iSeries 7 में और यह काम किया।

+0

शानदार! यह सही जवाब होना चाहिए। :-) पहले एन पंक्तियां केवल उपयोगी है, लेकिन सैद्धांतिक रूप से 100% समकक्ष नहीं है। वाहवाही। –

0

आईबीएम की बात आने पर मैं केवल एक बच्चा-गीक हूं - मैं एक एसक्यूएल सर्वर लड़का हूं। लेकिन मुझे राउनम्बर दृष्टिकोण मिला (जिसे मैंने ओरेकल में सफलतापूर्वक उपयोग किया है) डीबी 2 में काम नहीं किया था।

SELECT 
    MYFIELD 
FROM 
    "SCHEMANAME"."TABLENAME" 
WHERE 
    FILTERCOL1 = 000001 
    AND FILTERCOL2 = 1 
ORDER BY 
    MYFIELD DESC FETCH FIRST ROW ONLY 

(। मैं उतरते क्योंकि मैं अंतिम मान की जरूरत आदेश दिया)

आशा इस मदद करता है: मैं इस एक का उपयोग किया। जोय

0

इसके बजाय परिणाम को सीमित करना आसान नहीं होगा? बोलो तिथि के अनुसार क्रम में है और मैं शीर्ष परिणाम

SELECT banana_equipment_id 
FROM new_banana_equipment 
WHERE banana_code=0000001 
ORDER BY banana_date DESC 
LIMIT 1; 
+1

** LIMIT n ** का उपयोग 7.1 और बाद में डीबी 2 में किया जा सकता है, लेकिन यह ध्यान दिया जाना चाहिए कि यह _fetch-first-clause_ के लिए सिर्फ एक वैकल्पिक वाक्यविन्यास है। वही व्यवहार ** LIMIT 1 ** के साथ होता है जैसे ** केवल 1 फ़ीचर ** के साथ। – user2338816