Puoi ottenere tutti i dati di una riga combinando ORDER BY
e LIMIT 1
. Nel tuo caso, utilizzalo due volte e combinalo con 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
)
Un altro modo è inserire l'età massima di maschi e femmine (con sottoquery):
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'
)
)
Se hai più di 2 sessi o se preferisci non codificare Male
e Female
costanti nella query, questo può essere riscritto come:
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
Le query di cui sopra presentano una differenza principale. Il 1° ti darà un solo risultato maschile e solo uno femminile (al massimo). La seconda e la terza query ti daranno più di una quando ce ne sono molti (maschi) con la stessa età massima e allo stesso modo per le femmine.
Un indice su (gender, age)
aiuterà entrambe le query.