Všechna data řádku můžete získat kombinací ORDER BY
a LIMIT 1
. Ve vašem případě to použijte dvakrát a zkombinujte s 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
)
Dalším způsobem je zjistit maximální věk mužů a žen (pomocí dílčích dotazů):
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'
)
)
Pokud máte více než 2 pohlaví nebo pokud nechcete napevno kódovat Male
a Female
konstanty v dotazu, to lze přepsat jako:
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
Výše uvedené dotazy mají zásadní rozdíl. 1. vám dá pouze jeden mužský a pouze jeden ženský výsledek (maximálně). 2. a 3. dotaz vám poskytne více než jeden, pokud existuje mnoho (mužů) se stejným maximálním věkem a podobně pro ženy.
Index na (gender, age)
pomůže buď dotaz.