id value
1 50
2 60
3 55
select max(value) from tablename;
সাধারণত আমরা জানি, আমরা 60 পাব, তবে আমার পরবর্তী মান 55 লাগবে।
এসকিউএল ব্যবহার করে আমি কীভাবে 55 মান পাব?
id value
1 50
2 60
3 55
select max(value) from tablename;
সাধারণত আমরা জানি, আমরা 60 পাব, তবে আমার পরবর্তী মান 55 লাগবে।
এসকিউএল ব্যবহার করে আমি কীভাবে 55 মান পাব?
উত্তর:
সর্বোচ্চ মানটি একবারে ঘটেছিল তা ধরে নিলে, অন্য OFFSET
উপায়টি ব্যবহার করা হবে (এসকিউএল সার্ভার ২০১২ বা তার পরে):
SELECT *
FROM tablename
ORDER BY column DESC
OFFSET 1 ROW
FETCH NEXT 1 ROW ONLY;
সারণীতে দ্বিতীয় সর্বোচ্চ স্বতন্ত্র মান পেতে আপনি ব্যবহার করতে পারেন
SELECT MIN(value)
FROM (SELECT DISTINCT TOP (2) value
FROM tablename
ORDER BY value DESC)T
/*If only one distinct value return nothing. */
HAVING MIN(value) <> MAX(value);
একটি জেনেরিক সমাধান নীচের মত হতে পারে:
;WITH CTE AS
(
SELECT
Col1
, Col2
, <AnyColumns>
, ROW_NUMBER() OVER (ORDER BY <AnyColumns>) AS RowNum
FROM <YourTable>
WHERE <YourCondition>
)
SELECT *
FROM CTE
WHERE RowNum = 2 -- Or any condition which satisfies your problem
এখানে আপনি পছন্দগুলি পরিসীমাও নির্ধারণ করতে পারেন RowNum >= 10 AND RowNum <= 20
। এবং এটি আপনাকে সমস্ত প্রয়োজনীয় কলামগুলির সাথে 10 তম থেকে 20 তম সারি দেবে।
আপনার যথারীতি শীর্ষ কৌশল যেমন:
select top 1 *
from (
select top 2 *
from my_table
order by value desc
) t
order by value asc
অথবা আপনি সিটিই এর মতো ব্যবহার করতে পারেন:
with CTE as
(
select value, ROW_NUMBER() over(order by value desc) as ord_id
from my_table
)
select value
from CTE
where ord_id = 2
অথবা, যদি আপনি এসকিউএল সার্ভারের (> = 2012) সাম্প্রতিক সংস্করণটি ব্যবহার করেন তবে ল্যাগ ফাংশন।
SELECT top 1 lag(value, 1,0) OVER (ORDER BY value)
FROM my_table
order by value desc
আপনি ROW_NUMBER()
উইন্ডোটিং ফাংশনটিও ব্যবহার করতে পারেন । আপনি যদি আপনার টার্গেট মান দ্বারা অর্ডার করা হয় তবে আপনি 2 তম এন্ট্রি পেতে চান, আপনি এটি করতে পারেন:
SELECT value
FROM (
SELECT
ROW_NUMBER() OVER (PARTITION BY NULL ORDER BY value DESC) as RN,
value
FROM my_table
) d
WHERE RN = 2
এখন আপনি যদি ২ য় সর্বোচ্চ মান পেতে চান এবং আপনার নকল রয়েছে, আপনি মান এন্ট্রি দ্বারা গোষ্ঠী করতে চান যাতে আপনি কেবল স্বতন্ত্র মান পেতে পারেন।
SELECT value
FROM (
SELECT
ROW_NUMBER() OVER (PARTITION BY NULL ORDER BY value DESC) as RN,
value
FROM my_table
GROUP BY value
) d
WHERE RN = 2
আপনার MIN(id)
যদি দ্বিতীয় সর্বোচ্চ মান সহ প্রথম রেকর্ডের আইডি জানতে হবে (ধরে নেওয়া উচিত যে আপনার কাছে দুটি 60s এবং দুটি 55s সহ একটি ডেটা সেট রয়েছে) তবে আপনার অভ্যন্তরীণ নির্বাচনের একটি অন্তর্ভুক্ত করার জন্য আপনার এই পদ্ধতির পরিবর্তন করতে সক্ষম হওয়া উচিত
ROW_NUMBER()
সঙ্গেDENSE_RANK()
- আপনার কাছে বিনামূল্যে জন্য সব অন্যান্য কলাম পেতে। ব্যবহার করার দরকার নেইGROUP BY
।