উত্তর:
আপনি যদি কেবলমাত্র প্রথম নির্বাচিত সারিটি চান তবে আপনি এটি করতে পারেন:
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
। এমনকি আমি এটি একটি আউটর অ্যাপ্লিকেশন নির্দেশেও চেষ্টা করেছি এবং এটি সেখানে 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
শীর্ষে প্রথম মান রাখার আগে আপনি নিজের ফলাফলটি অর্ডার করতে পারেন।
শুভকামনা