हम एक समग्र फ़ंक्शन के परिणाम का संदर्भ नहीं दे सकते (उदाहरण के लिए MAX()
) एक WHERE
. में उसी का खंड SELECT
।
इस प्रकार की समस्या को हल करने के लिए मानक पैटर्न एक इनलाइन दृश्य का उपयोग करना है, कुछ इस तरह:
SELECT t.firstName
, t.Lastname
, t.id
FROM mytable t
JOIN ( SELECT MAX(mx.id) AS max_id
FROM mytable mx
) m
ON m.max_id = t.id
निर्दिष्ट परिणाम प्राप्त करने का यह सिर्फ एक तरीका है। समान परिणाम प्राप्त करने के लिए कई अन्य दृष्टिकोण हैं, और उनमें से कुछ दूसरों की तुलना में बहुत कम कुशल हो सकते हैं। अन्य उत्तर इस दृष्टिकोण को प्रदर्शित करते हैं:
WHERE t.id = (SELECT MAX(id) FROM ... )
कभी-कभी, सबसे आसान तरीका यह है कि LIMIT के साथ ORDER BY का उपयोग किया जाए। (ध्यान दें कि यह सिंटैक्स MySQL के लिए विशिष्ट है)
SELECT t.firstName
, t.Lastname
, t.id
FROM mytable t
ORDER BY t.id DESC
LIMIT 1
ध्यान दें कि यह केवल एक पंक्ति लौटाएगा; इसलिए यदि समान आईडी मान वाली एक से अधिक पंक्तियाँ हैं, तो यह उन सभी को वापस नहीं करेगा। (पहली क्वेरी उन सभी पंक्तियों को लौटा देगी जिनका आईडी मान समान है।)
इस दृष्टिकोण को एक से अधिक पंक्ति प्राप्त करने के लिए बढ़ाया जा सकता है, आप उन पांच पंक्तियों को प्राप्त कर सकते हैं जिनमें उच्चतम आईडी मान हैं, इसे LIMIT 5
में बदलकर .
ध्यान दें कि इस दृष्टिकोण का प्रदर्शन विशेष रूप से एक उपयुक्त सूचकांक के उपलब्ध होने पर निर्भर है (अर्थात id
के साथ) प्राथमिक कुंजी के रूप में या किसी अन्य अनुक्रमणिका में अग्रणी स्तंभ के रूप में।) एक उपयुक्त अनुक्रमणिका इन सभी दृष्टिकोणों का उपयोग करके प्रश्नों के प्रदर्शन में सुधार करेगी।