जवाबों:
यदि आप केवल पहली चयनित पंक्ति चाहते हैं, तो आप निम्न कर सकते हैं:
select fname from MyTbl where rownum = 1
आप शीर्ष एक्स को ऑर्डर करने और लेने के लिए विश्लेषणात्मक कार्यों का उपयोग कर सकते हैं:
select max(fname) over (rank() order by some_factor) from MyTbl
SELECT *
FROM (SELECT * FROM MyTbl ORDER BY Fname )
WHERE ROWNUM = 1;
top Xएक करने के लिए इसे बदल सकते हैंWHERE ROWNUM <= X
साथ ओरेकल 12C (जून 2013), आप निम्नलिखित की तरह उपयोग कर सकते हैं।
SELECT * FROM MYTABLE
--ORDER BY COLUMNNAME -OPTIONAL
OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY
OFFSET 0 ROWSजाहिरा तौर पर आवश्यक नहीं है, आप उपयोग कर सकते हैं FETCH NEXT 1 ROWS ONLYया यहां तक कि FETCH FIRST ROW ONLY, आदेश महत्वपूर्ण है या यह सिर्फ एक का उपयोग करने के बराबर होगा WHERE rownum = 1। मैंने इसे एक OUTER APPLY इंस्ट्रक्शन में भी आज़माया है और यह Ms-SQL के टॉप फंक्शन की तरह काम करता है।
TIES। यह उन मामलों के लिए देखें , जब संस्करण के लिए संबंध होते हैं 12c +और12c -
आप उप-क्वेरी में ROW_NUMBER()एक ORDER BYक्लॉज के साथ उपयोग कर सकते हैं और इस कॉलम को प्रतिस्थापन में बदल सकते हैं TOP N। इसे चरण-दर-चरण समझाया जा सकता है।
नीचे दी गई तालिका देखें जिसमें दो कॉलम हैं NAMEऔर DT_CREATED।
यदि आपको इसकी परवाह किए बिना केवल पहली दो तारीखें लेने की आवश्यकता है NAME, तो आप नीचे दिए गए क्वेरी का उपयोग कर सकते हैं। तर्क क्वेरी के अंदर लिखा गया है
-- The number of records can be specified in WHERE clause
SELECT RNO,NAME,DT_CREATED
FROM
(
-- Generates numbers in a column in sequence in the order of date
SELECT ROW_NUMBER() OVER (ORDER BY DT_CREATED) AS RNO,
NAME,DT_CREATED
FROM DEMOTOP
)TAB
WHERE RNO<3;
परिणाम
कुछ स्थितियों में, हमें TOP Nप्रत्येक से संबंधित परिणामों का चयन करना होगा NAME। ऐसे मामले में हम उप-क्वेरी में PARTITION BYएक ORDER BYखंड के साथ उपयोग कर सकते हैं । नीचे दिए गए प्रश्न का संदर्भ लें।
-- The number of records can be specified in WHERE clause
SELECT RNO,NAME,DT_CREATED
FROM
(
--Generates numbers in a column in sequence in the order of date for each NAME
SELECT ROW_NUMBER() OVER (PARTITION BY NAME ORDER BY DT_CREATED) AS RNO,
NAME,DT_CREATED
FROM DEMOTOP
)TAB
WHERE RNO<3;
परिणाम
with (select ... ) as क्लॉज) इस समस्या के लिए कुछ भी नहीं बदलता है, सीटीई सिर्फ प्रश्नों को पढ़ने और समर्थन करने के उद्देश्य से है। सही? @ सारथ अवानवु
आप कुछ ऐसा कर सकते हैं
SELECT *
FROM (SELECT Fname FROM MyTbl ORDER BY Fname )
WHERE rownum = 1;
आप विश्लेषणात्मक कार्यों RANK और / या DENSE_RANK का भी उपयोग कर सकते हैं , लेकिन ROWNUM शायद सबसे आसान है।
उपयोग:
SELECT x.*
FROM (SELECT fname
FROM MyTbl) x
WHERE ROWNUM = 1
यदि Oracle9i + का उपयोग कर रहे हैं, तो आप ROW_NUMBER () जैसे विश्लेषणात्मक कार्यों का उपयोग करके देख सकते हैं, लेकिन वे ROWNUM के रूप में भी प्रदर्शन नहीं करेंगे ।
तालिका से पहली पंक्ति चुनने के लिए और तालिका से एक पंक्ति चुनने के लिए दो अलग-अलग कार्य हैं और एक अलग क्वेरी की आवश्यकता है। ऐसा करने के कई संभावित तरीके हैं। उनमें से चार हैं:
प्रथम
select max(Fname) from MyTbl;
दूसरा
select min(Fname) from MyTbl;
तीसरा
select Fname from MyTbl where rownum = 1;
चौथा
select max(Fname) from MyTbl where rowid=(select max(rowid) from MyTbl)
मेरे पास एक ही मुद्दा था, और मैं इस समाधान के साथ इसे ठीक कर सकता हूं:
select a.*, rownum
from (select Fname from MyTbl order by Fname DESC) a
where
rownum = 1
शीर्ष पर पहला मान रखने से पहले आप अपना परिणाम ऑर्डर कर सकते हैं।
सौभाग्य