मैं ऐसा कुछ कैसे करूंगा?
SQL चयन पंक्ति FROM तालिका से जहां आईडी = अधिकतम (आईडी)
मैं ऐसा कुछ कैसे करूंगा?
SQL चयन पंक्ति FROM तालिका से जहां आईडी = अधिकतम (आईडी)
जवाबों:
आप एक सबसिलेक्ट का उपयोग कर सकते हैं:
SELECT row
FROM table
WHERE id=(
SELECT max(id) FROM table
)
ध्यान दें कि यदि मान max(id)
विशिष्ट नहीं है, तो कई पंक्तियाँ वापस आ जाती हैं।
यदि आप केवल ऐसी ही एक पंक्ति चाहते हैं, तो @ MichaelMior के उत्तर का उपयोग करें,
SELECT row from table ORDER BY id DESC LIMIT 1
id
एक तालिका में सिर्फ एक स्तंभ है। इस बात की कोई गारंटी नहीं है कि id
कॉलम में मान अद्वितीय होने चाहिए।
id
एक प्राथमिक या अद्वितीय कुंजी नहीं है :) नाम को देखते हुए, यह एक उचित मौका है कि यह है। यह भी ध्यान देने योग्य है कि आपके द्वारा उपयोग किए जा रहे DBMS के आधार पर, सबसिलेक्ट के साथ दृष्टिकोण बहुत कम कुशल हो सकता है।
id
एक विदेशी कुंजी हो सकती है, जिस स्थिति में यह अद्वितीय नहीं हो सकती है। मैंने कुछ बेंचमार्किंग का उपयोग किया था set profiling = 1; ...; show profiles
और ऐसा लगता है कि हमारे समाधान में MySQL का उपयोग करने वाला समान प्रदर्शन है। मेरे स्वयं के ज्ञान के लिए, क्या आप जानते हैं कि DBMS में सबसिलेक्टर्स के लिए खराब प्रदर्शन क्या है?
आप भी कर सकते हैं
SELECT row FROM table ORDER BY id DESC LIMIT 1;
यह अवरोही क्रम में उनकी ID द्वारा पंक्तियों को क्रमबद्ध करेगा और पहली पंक्ति लौटाएगा। यह अधिकतम आईडी के साथ पंक्ति को वापस करने के समान है। यह निश्चित रूप से मानता है कि 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
यदि आप डेटा के प्रकार के आधार पर रैंक () फ़ंक्शन के साथ समस्या का सामना करते हैं तो पंक्ति से चुन सकते हैं nnumber () या dense_rank () भी।
इस के साथ प्रयास करें
SELECT top 1 id, Col2, row_number() over (order by id desc) FROM Table