Vous pouvez obtenir toutes les données d'une ligne combinant ORDER BY
et LIMIT 1
. Dans votre cas, utilisez ceci deux fois et combinez avec 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
)
Une autre façon est de trouver l'âge maximum des hommes et des femmes (avec des sous-requêtes) :
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'
)
)
Si vous avez plus de 2 genres ou si vous préférez ne pas coder en dur Male
et Female
constantes dans la requête, cela peut être réécrit comme :
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
Les requêtes ci-dessus ont une différence principale. Le 1er vous donnera un seul résultat masculin et un seul résultat féminin (au plus). La 2ème et 3ème requête vous en donnera plus d'une lorsqu'il y a plusieurs (hommes) avec le même âge maximum et de même pour les femmes.
Un index sur (gender, age)
aidera l'une ou l'autre requête.