টেবিলের বৃহত্তম আইডি থাকা একটি সম্পূর্ণ সারিটি কীভাবে নির্বাচন করব?


141

আমি কীভাবে এমন কিছু করব?

এসকিউএল সারণি থেকে সারি নির্বাচন করুন যেখানে আইডি = সর্বোচ্চ (আইডি)

উত্তর:


228

আপনি একটি সাবলেট ব্যবহার করতে পারেন:

SELECT row 
FROM table 
WHERE id=(
    SELECT max(id) FROM table
    )

মনে রাখবেন যে মানটি যদি max(id)অনন্য না হয় তবে একাধিক সারি ফিরে আসবে।

আপনি যদি কেবল এই জাতীয় একটি সারি চান তবে @ মাইকেলমায়ারের উত্তরটি ব্যবহার করুন,

SELECT row from table ORDER BY id DESC LIMIT 1

6
@ আলিরিজাসুরি: নাম সত্ত্বেও, idএকটি টেবিলের কেবল একটি কলাম। idকলামের মানগুলি অনন্য হতে হবে এমন কোনও গ্যারান্টি নেই ।
unutbu

1
@ ইউন্টবু এটা ধরে নিচ্ছেন যে idএটি প্রাথমিক বা অনন্য কী নয় :) নামটি দেওয়া হয়েছে, এটির একটি যুক্তিসঙ্গত সুযোগ রয়েছে। এটিও লক্ষণীয় যে আপনি যে ডিবিএমএস ব্যবহার করছেন তার উপর নির্ভর করে সাবট্রাক্টের সাথে যোগাযোগ করা খুব কম দক্ষ হতে পারে।
মাইকেল মায়ার

3
@ মিশেলমিয়ার: idএকটি বিদেশী কী হতে পারে, এক্ষেত্রে এটি অনন্য হতে পারে না। আমি ব্যবহার করে কিছু বেঞ্চমার্কিং করেছি set profiling = 1; ...; show profilesএবং এটি মাইএসকিউএল ব্যবহার করে আমাদের সমাধানগুলির একই কার্যকারিতা রয়েছে বলে মনে হয়। আমার নিজের জ্ঞানের জন্য, আপনি কি জানেন যে ডিবিএমএসের সাবলেটগুলির জন্য আরও খারাপ অভিনয় রয়েছে?
unutbu

1
এটি একটি বিদেশী কী হতে পারে, কিন্তু আমি যেমন বলেছিলাম, আমি কেবল এটির নাম অনুসারে অনুমান করছি it মাইএসকিউএল historতিহাসিকভাবে সাবলেটগুলির সাথে খারাপ পারফরম্যান্স হিসাবে পরিচিত। এটি যদিও নতুন সংস্করণগুলিতে ব্যাপকভাবে উন্নত হয়েছে, তাই আপনি কোন সংস্করণটি ব্যবহার করছেন তা নির্ভর করে। যাইহোক, এটি পুনর্বিবেচনা, এই বিশেষ ক্যোয়ারী ঠিক আছে হতে পারে। যদিও প্রোফাইলিং নিয়ে কয়েকবার ক্যোয়ারী চালানো অপেক্ষাকৃত পারফরম্যান্স সম্পর্কে বেশি কিছু বলে না।
মাইকেল মায়ার

149

আপনি করতে পারেন

SELECT row FROM table ORDER BY id DESC LIMIT 1;

এটি তাদের আইডি দ্বারা সারিগুলি অবতরণ ক্রমে সাজিয়ে রাখবে এবং প্রথম সারিতে ফিরে আসবে। সর্বাধিক আইডি সহ সারিটি ফিরিয়ে দেওয়া সমান। এটি অবশ্যই ধরে নেয় যে idসমস্ত সারিগুলির মধ্যে অনন্য। অন্যথায় সর্বাধিক মান সহ একাধিক সারি থাকতে পারে idএবং আপনি কেবল একটি পাবেন।


ওপি যা বলছে তা বিশেষভাবে করার জন্য, আমি এটি করব। তবে অন্যান্য উত্তরগুলি এসকিউএল কাঠামোর উপর আরও ভাল শিক্ষার ব্যবস্থা করে :)
ম্যাটবাইলি

@ ডিমেস কিভাবে? অন্য কোন উত্তর দেওয়া হয়নি? আমি অবশ্যই
এটির

অন্য যে প্রশ্নগুলি যুক্তি সংশোধন না করে বাক্য গঠন সংশোধন করে। সুতরাং, ওপি শিখবে যে কীভাবে নির্দিষ্ট নির্দিষ্ট স্ক্যাকল সঠিকভাবে করা যায়।
ম্যাটবাইলি

ফেয়ার পয়েন্ট :) যদিও অন্যান্য উত্তরগুলি যুক্তিযুক্তভাবে এখনও যুক্তি সংশোধন করছে।
মাইকেল মায়ার

অভিনয় সম্পর্কে কি? আমি ইতিমধ্যে আমার জন্য কাজ করা এই ধরণের কোয়েরি নিয়ে এখানে এসেছি, তবে আমি ভাবছিলাম যে এটি সঠিক উপায় কিনা। অর্ডার কোনও ও (এন * লগ এন) অপারেশন দ্বারা নয়?
hill

27
SELECT * 
FROM table 
WHERE id = (SELECT MAX(id) FROM TABLE)

@ shA.t SELECT entry FROM table WHERE id = MAX(id)কাজ করবে না ?!
ওল্ডবয়

@ shA.t এছাড়াও, আমি নিম্নলিখিতগুলির মতো কিছু করার চেষ্টা করছি: SELECT entry_time FROM users_unverified WHERE num_id = (SELECT MAX(num_id) FROM users_unverified WHERE account_email = :account_email)যার মাধ্যমে আমার কেবলমাত্র entry_timeডেটাবেসটিতে অতি সাম্প্রতিক প্রবেশের প্রয়োজন । এই বিবৃতিটি কি যথেষ্ট বা এটি হওয়া উচিত:SELECT entry_time FROM users_unverified WHERE num_id = (SELECT MAX(num_id) FROM users_unverified) AND account_email = :account_email
ওল্ডবয়

কোনও ক্যোয়ারী ফলাফলের সর্বাধিক সাম্প্রতিক প্রবেশের জন্য কোনও বিশ্বস্ত অর্থ নেই, আপনার সন্নিবেশ সময় এবং এর জন্য আরও একটি ক্ষেত্র থাকা দরকার। বিটিডাব্লু, দয়া করে আপনার প্রশ্নটি আলাদাভাবে জিজ্ঞাসা করুন, আমি আশা করি আপনি আরও মনোযোগ পাবেন -HTH;)।
shA.t

17

আপনি দিতে পারবেন না order byকারণ order byএকটি টেবিলে একটি "সম্পূর্ণ স্ক্যান" করে।

নিম্নলিখিত কোয়েরি আরও ভাল:

SELECT * FROM table WHERE id = (SELECT MAX(id) FROM table);

18
ORDER BYআপনি যদি ধরে idনেন যে এটি টেবিলের প্রাথমিক কী। (এবং যদি এটি না হয় তবে এটির বদলে নামকরণ করা হয়েছে)) যদি তা না হয় তবে আপনি কীভাবে MAX(id)পুরো টেবিল স্ক্যান ছাড়া কাজ করার আশা করবেন? যদি কোনও সূচক না থাকে তবে সর্বোচ্চটি সন্ধান করতে প্রতিটি মান অবশ্যই পরীক্ষা করা উচিত।
মাইকেল মায়ার

@ কেকলাইকবস ওয়েল ওয়েল আমি আসলে "ক্রম অনুসারে" ক্যোয়ারীটি এবং আপনার "সারণী থেকে ফর্ম টেবিল WHIDE id = (সারণী থেকে সর্বোচ্চ (আইডি) সারণী)) চেষ্টা করেছি;" 114 সারিগুলির একটি সারণীর উপর কোয়েরি যখন এই কোয়েরিটি প্রতিবার ঠিক 0.0004 সেকেন্ড নিয়েছিল যখন দ্বিতীয় ক্যোয়ারী 0.0007 থেকে 0.0010 সেকেন্ড নিয়েছিল আমি বেশ কয়েকবার এই পুনরাবৃত্তি করেছি
17:50

1

কেউ সর্বদা বিশ্লেষণমূলক ফাংশনগুলির জন্য যেতে পারেন যা আপনাকে আরও নিয়ন্ত্রণ দেয়

select tmp.row from ( select row, rank() over(partition by id order by id desc ) as rnk from table) tmp where tmp.rnk=1

আপনি যদি তথ্যের ধরণের উপর নির্ভর করে র‌্যাঙ্ক () ফাংশন নিয়ে সমস্যার মুখোমুখি হন তবে কেউ সারি_নম্বার () বা ঘন_রঙ্ক () থেকেও বেছে নিতে পারেন।


0

এটি দিয়ে চেষ্টা করুন

 SELECT top 1  id, Col2,  row_number() over (order by id desc)  FROM Table

9
শীর্ষ কীওয়ার্ড মাইএসকিউএল এ কাজ করে না। এই কোয়েরিটি কাজ করবে না।
অনিরুদ্ধ গুপ্ত

@ টডডমো: মাইএসকিউএল! এবং স্কেল-সার্ভার অন্যান্য লোকের পক্ষেও সহায়ক নয়। আপনি এমএস-এসকিউএল মানে?
কিসমারেল

@ রেজারেল, আপনি কি এই প্রশ্নে আমার মন্তব্য বা পোস্ট করেছেন সেখানে সন্ধান করতে সহায়তা করতে পারেন? আমি এই প্রশ্নের সাথে আমার নাম সংযুক্ত দেখতে পাচ্ছি না see
টুডমো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.