Du kan få alle data fra en række ved at kombinere ORDER BY
og LIMIT 1
. I dit tilfælde skal du bruge dette to gange og kombinere med 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
)
En anden måde er at finde den maksimale alder for mænd og kvinder (med underforespørgsler):
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'
)
)
Hvis du har mere end 2 køn, eller hvis du foretrækker ikke at hardkode Male
og Female
konstanter i forespørgslen, kan dette omskrives som:
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
Ovenstående forespørgsler har en væsentlig forskel. Den 1. giver dig kun én mandlig og kun én kvindelig resultat (højst). Den 2. og 3. forespørgsel vil give dig mere end én, når der er mange (mænd) med samme maksimale alder og tilsvarende for kvinder.
Et indeks på (gender, age)
vil hjælpe begge forespørgsler.