আমি কীভাবে এমন কিছু করব?
এসকিউএল সারণি থেকে সারি নির্বাচন করুন যেখানে আইডি = সর্বোচ্চ (আইডি)
আমি কীভাবে এমন কিছু করব?
এসকিউএল সারণি থেকে সারি নির্বাচন করুন যেখানে আইডি = সর্বোচ্চ (আইডি)
উত্তর:
আপনি একটি সাবলেট ব্যবহার করতে পারেন:
SELECT row
FROM table
WHERE id=(
SELECT max(id) FROM table
)
মনে রাখবেন যে মানটি যদি max(id)অনন্য না হয় তবে একাধিক সারি ফিরে আসবে।
আপনি যদি কেবল এই জাতীয় একটি সারি চান তবে @ মাইকেলমায়ারের উত্তরটি ব্যবহার করুন,
SELECT row from table ORDER BY id DESC LIMIT 1
idএকটি টেবিলের কেবল একটি কলাম। idকলামের মানগুলি অনন্য হতে হবে এমন কোনও গ্যারান্টি নেই ।
idএটি প্রাথমিক বা অনন্য কী নয় :) নামটি দেওয়া হয়েছে, এটির একটি যুক্তিসঙ্গত সুযোগ রয়েছে। এটিও লক্ষণীয় যে আপনি যে ডিবিএমএস ব্যবহার করছেন তার উপর নির্ভর করে সাবট্রাক্টের সাথে যোগাযোগ করা খুব কম দক্ষ হতে পারে।
idএকটি বিদেশী কী হতে পারে, এক্ষেত্রে এটি অনন্য হতে পারে না। আমি ব্যবহার করে কিছু বেঞ্চমার্কিং করেছি set profiling = 1; ...; show profilesএবং এটি মাইএসকিউএল ব্যবহার করে আমাদের সমাধানগুলির একই কার্যকারিতা রয়েছে বলে মনে হয়। আমার নিজের জ্ঞানের জন্য, আপনি কি জানেন যে ডিবিএমএসের সাবলেটগুলির জন্য আরও খারাপ অভিনয় রয়েছে?
আপনি করতে পারেন
SELECT row FROM table ORDER BY id DESC LIMIT 1;
এটি তাদের আইডি দ্বারা সারিগুলি অবতরণ ক্রমে সাজিয়ে রাখবে এবং প্রথম সারিতে ফিরে আসবে। সর্বাধিক আইডি সহ সারিটি ফিরিয়ে দেওয়া সমান। এটি অবশ্যই ধরে নেয় যে idসমস্ত সারিগুলির মধ্যে অনন্য। অন্যথায় সর্বাধিক মান সহ একাধিক সারি থাকতে পারে idএবং আপনি কেবল একটি পাবেন।
SELECT *
FROM table
WHERE id = (SELECT MAX(id) FROM TABLE)
SELECT entry FROM table WHERE id = MAX(id)কাজ করবে না ?!
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
আপনি দিতে পারবেন না order byকারণ order byএকটি টেবিলে একটি "সম্পূর্ণ স্ক্যান" করে।
নিম্নলিখিত কোয়েরি আরও ভাল:
SELECT * FROM table WHERE id = (SELECT MAX(id) FROM table);
ORDER BYআপনি যদি ধরে idনেন যে এটি টেবিলের প্রাথমিক কী। (এবং যদি এটি না হয় তবে এটির বদলে নামকরণ করা হয়েছে)) যদি তা না হয় তবে আপনি কীভাবে MAX(id)পুরো টেবিল স্ক্যান ছাড়া কাজ করার আশা করবেন? যদি কোনও সূচক না থাকে তবে সর্বোচ্চটি সন্ধান করতে প্রতিটি মান অবশ্যই পরীক্ষা করা উচিত।
কেউ সর্বদা বিশ্লেষণমূলক ফাংশনগুলির জন্য যেতে পারেন যা আপনাকে আরও নিয়ন্ত্রণ দেয়
select tmp.row from ( select row, rank() over(partition by id order by id desc ) as rnk from table) tmp where tmp.rnk=1
আপনি যদি তথ্যের ধরণের উপর নির্ভর করে র্যাঙ্ক () ফাংশন নিয়ে সমস্যার মুখোমুখি হন তবে কেউ সারি_নম্বার () বা ঘন_রঙ্ক () থেকেও বেছে নিতে পারেন।
এটি দিয়ে চেষ্টা করুন
SELECT top 1 id, Col2, row_number() over (order by id desc) FROM Table