आप ORDER BY
. को मिलाकर एक पंक्ति का सारा डेटा प्राप्त कर सकते हैं और LIMIT 1
. आपके मामले में, इसका दो बार उपयोग करना और UNION
. के साथ संयोजन करना :
( SELECT *
FROM person
WHERE gender = 'Male'
ORDER BY age DESC
LIMIT 1
)
UNION ALL
( SELECT *
FROM person
WHERE gender = 'Female'
ORDER BY age DESC
LIMIT 1
)
दूसरा तरीका है पुरुषों और महिलाओं की अधिकतम आयु (उपश्रेणियों के साथ):
SELECT *
FROM person
WHERE ( gender = 'Male'
AND age =
( SELECT MAX(age)
FROM person
WHERE gender = 'Male'
)
)
OR ( gender = 'Female'
AND age =
( SELECT MAX(age)
FROM person
WHERE gender = 'Female'
)
)
यदि आपके पास 2 से अधिक लिंग हैं या यदि आप हार्डकोड नहीं करना चाहते हैं Male
और Female
क्वेरी में स्थिरांक, इसे इस प्रकार फिर से लिखा जा सकता है:
SELECT p.*
FROM person AS p
JOIN
( SELECT gender
, MAX(age) AS maxage
FROM person
GROUP BY gender
) AS pg
ON pg.gender = p.gender
AND pg.maxage = p.age
उपरोक्त प्रश्नों में मुख्य अंतर है। पहला आपको केवल एक पुरुष और केवल एक महिला परिणाम देगा (अधिकतम)। दूसरी और तीसरी क्वेरी आपको एक से अधिक देगी जब समान अधिकतम आयु वाले और समान रूप से महिलाओं के लिए कई (पुरुष) हों।
(gender, age)
. पर एक इंडेक्स किसी भी प्रश्न में मदद करेगा।