উত্তর:
SELECT MAX( col )
FROM table
WHERE col < ( SELECT MAX( col )
FROM table )
টি-স্কেলে দুটি উপায় রয়েছে:
--filter out the max
select max( col )
from [table]
where col < (
select max( col )
from [table] )
--sort top two then bottom one
select top 1 col
from (
select top 2 col
from [table]
order by col) topTwo
order by col desc
মাইক্রোসফ্ট এসকিউএল-তে প্রথম উপায়টি দ্বিতীয়টির চেয়ে দ্বিগুণ দ্রুত, এমনকি যদি প্রশ্নযুক্ত কলামটি ক্লাস্টার করা থাকে।
এটি এই কারণে যে সারণি বা সূচক স্ক্যানটি max
সমষ্টিটি ব্যবহার করে তার তুলনায় ক্রমান্বিত অপারেশন তুলনামূলকভাবে ধীর ।
বিকল্পভাবে, মাইক্রোসফ্ট এসকিউএল 2005 এবং তারপরে আপনি এই ROW_NUMBER()
ফাংশনটি ব্যবহার করতে পারেন :
select col
from (
select ROW_NUMBER() over (order by col asc) as 'rowNum', col
from [table] ) withRowNum
where rowNum = 2
আমি এখানে কিছু এসকিউএল সার্ভার নির্দিষ্ট এবং কিছু মাইএসকিউএল নির্দিষ্ট সমাধান উভয়ই দেখতে পাচ্ছি, যাতে আপনার কোন ডাটাবেসের প্রয়োজন তা আপনি পরিষ্কার করতে চাইতে পারেন। যদিও আমার অনুমান করতেই হবে আমি এসকিউএল সার্ভার বলব যেহেতু এটি মাইএসকিউএলে তুচ্ছ।
আমি এমন কিছু সমাধানও দেখতে পাচ্ছি যা কার্যকর হবে না কারণ তারা সদৃশগুলির সম্ভাবনা বিবেচনায় নিতে ব্যর্থ হয়, তাই আপনি কোনটি গ্রহণ করবেন সে সম্পর্কে সতর্ক থাকুন। পরিশেষে, আমি কয়েকটি দেখতে পাচ্ছি যা কাজ করবে তবে এটি টেবিলের দুটি সম্পূর্ণ স্ক্যান করবে। আপনি নিশ্চিত করতে চান যে ২ য় স্ক্যানটি কেবলমাত্র 2 টি মানকে দেখছে।
এসকিউএল সার্ভার (প্রাক-2012):
SELECT MIN([column]) AS [column]
FROM (
SELECT TOP 2 [column]
FROM [Table]
GROUP BY [column]
ORDER BY [column] DESC
) a
মাইএসকিউএল:
SELECT `column`
FROM `table`
GROUP BY `column`
ORDER BY `column` DESC
LIMIT 1,1
হালনাগাদ:
এসকিউএল সার্ভার ২০১২ এখন অফার / ফেচ সিনট্যাক্সকে অনেক ক্লিনার (এবং মানক ) সমর্থন করে :
SELECT TOP 2 [column]
FROM [Table]
GROUP BY [column]
ORDER BY [column] DESC
OFFSET 1 ROWS
FETCH NEXT 1 ROWS ONLY;
n
। এই এক যে পরীক্ষা দাঁড়িয়ে।
TOP
এবং OFFSET
একই ক্যোয়ারিতে।
আমি মনে করি আপনি যেমন কিছু করতে পারেন:
SELECT * FROM Table ORDER BY NumericalColumn DESC LIMIT 1 OFFSET 1
অথবা
SELECT * FROM Table ORDER BY NumericalColumn DESC LIMIT (1, 1)
আপনার ডাটাবেস সার্ভারের উপর নির্ভর করে। ইঙ্গিত: এসকিউএল সার্ভার সীমাবদ্ধ করে না।
OFFSET 2
আবেদনে এই ফলাফল সেট থেকে দ্বিতীয় মান পাওয়া সবচেয়ে সহজ হবে:
SELECT DISTINCT value FROM Table ORDER BY value DESC LIMIT 2
তবে আপনাকে যদি এসকিউএল ব্যবহার করে দ্বিতীয় মানটি অবশ্যই নির্বাচন করতে হয় তবে কীভাবে:
SELECT MIN(value) FROM (SELECT DISTINCT value FROM Table ORDER BY value DESC LIMIT 2) AS t
LIMIT
সিনট্যাক্স, প্রশ্নটি কোনও এসকিউএল সংস্করণ নির্দিষ্ট করে না।
নিম্নলিখিত কোয়েরিটি ব্যবহার করে আপনি কলামের দ্বিতীয় বৃহত্তম মানটি পেতে পারেন
SELECT *
FROM TableName a
WHERE
2 = (SELECT count(DISTINCT(b.ColumnName))
FROM TableName b WHERE
a.ColumnName <= b.ColumnName);
আপনি নীচের লিঙ্কে আরও বিশদ জানতে পারেন
http://www.abhishekbpatel.com/2012/12/how-to-get-nth-maximum-and-minimun.html
এমএস স্কুয়েল
SELECT *
FROM [Users]
order by UserId desc OFFSET 1 ROW
FETCH NEXT 1 ROW ONLY;
মাইএসকিউএল
SELECT *
FROM Users
order by UserId desc LIMIT 1 OFFSET 1
উপ-প্রশ্নের দরকার নেই ... কেবল একটি সারি এড়িয়ে যান এবং নেমে অর্ডার করার পরে দ্বিতীয় সারি নির্বাচন করুন
SELECT MAX(Salary) FROM Employee WHERE Salary NOT IN (SELECT MAX(Salary) FROM Employee )
এই ক্যোয়ারী ফলাফল থেকে সর্বোচ্চ বেতন প্রদান করবে - এতে সামগ্রিক সারণী থেকে সর্বাধিক বেতন নেই।
এটি খুব সাধারণ কোড, আপনি এটি ব্যবহার করে দেখতে পারেন: -
উদাহরণস্বরূপ: সারণির নাম = পরীক্ষা
salary
1000
1500
1450
7500
দ্বিতীয় বৃহত্তম মান পেতে এমএসএসকিউএল কোড
select salary from test order by salary desc offset 1 rows fetch next 1 rows only;
এখানে '1 সারি অফসেট' অর্থ টেবিলের দ্বিতীয় সারি এবং 'কেবল পরবর্তী 1 টি সারি আনুন' কেবল সেই 1 সারি দেখানোর জন্য। যদি আপনি 'কেবল পরের 1 টি সারি আনা' ব্যবহার না করেন তবে এটি দ্বিতীয় সারির সমস্ত সারি দেখায়।
টম, বিশ্বাস করুন যখন select max([COLUMN_NAME]) from [TABLE_NAME]
বিভাগে একাধিক মান ফিরে আসবে তখন এটি ব্যর্থ হবে । অর্থাত্ যেখানে ডেটা সেটে 2 টিরও বেশি মান রয়েছে।
আপনার ক্যোয়ারিতে সামান্য পরিবর্তন কাজ করবে -
select max([COLUMN_NAME]) from [TABLE_NAME] where [COLUMN_NAME] **IN**
( select max([COLUMN_NAME]) from [TABLE_NAME] )
SELECT
*
FROM
table
WHERE
column < (SELECT max(columnq) FROM table)
ORDER BY
column DESC LIMIT 1
এটি সবচেয়ে প্রাসঙ্গিক উপায়:
SELECT
Column name
FROM
Table name
ORDER BY
Column name DESC
LIMIT 1,1
select age from student group by id having age<(select max(age) from student)order by age limit 1
যেমন আপনি সদৃশ মান উল্লেখ করেছেন। সেক্ষেত্রে দ্বিতীয় সর্বোচ্চ মান খুঁজে পেতে আপনি DISTINCT এবং GROUP BY ব্যবহার করতে পারেন
এখানে একটি টেবিল
বেতন
:
গ্রুপ দ্বারা
SELECT amount FROM salary
GROUP by amount
ORDER BY amount DESC
LIMIT 1 , 1
স্বতন্ত্র
SELECT DISTINCT amount
FROM salary
ORDER BY amount DESC
LIMIT 1 , 1
লিমিটের প্রথম অংশ = সূচনা সূচক
সীমাবদ্ধতার দ্বিতীয় অংশ = কতটি মান
select max(column_name) from table_name
where column_name not in (select max(column_name) from table_name);
না একটি শর্ত যে COLUMN_NAME সর্বোচ্চ মান অগ্রাহ্য করা হয়।
তথ্যসূত্র: প্রোগ্রামার সাক্ষাত্কার
একটি এসকিউএল ডাটাবেস সারণিতে নবম সারিটি কীভাবে নির্বাচন করবেন তা দেখুন ?।
সিবাজ এসকিউএল যে কোনও জায়গায় সমর্থন করে:
SELECT TOP 1 START AT 2 value from table ORDER BY value
select top 1 MyIntColumn from MyTable
where
MyIntColumn <> (select top 1 MyIntColumn from MyTable order by MyIntColumn desc)
order by MyIntColumn desc