U kunt alle gegevens van een rij krijgen die ORDER BY
combineert en LIMIT 1
. In jouw geval, dit twee keer gebruiken en combineren met 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
)
Een andere manier is om de maximale leeftijd van mannen en vrouwen te bepalen (met subquery's):
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'
)
)
Als je meer dan 2 geslachten hebt of als je Male
liever niet hardcodeert en Female
constanten in de query, dit kan worden herschreven als:
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
De bovenstaande vragen hebben een belangrijk verschil. De 1e geeft je slechts één mannelijke en slechts één vrouwelijke resultaat (maximaal). De 2e en 3e zoekopdracht geeft u meer dan één wanneer er veel (mannen) zijn met dezelfde maximumleeftijd en ook voor vrouwen.
Een index op (gender, age)
zal beide vragen helpen.