Możesz uzyskać wszystkie dane z wiersza, łącząc ORDER BY
i LIMIT 1
. W twoim przypadku użyj tego dwa razy i połącz z 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
)
Innym sposobem jest określenie maksymalnego wieku mężczyzn i kobiet (za pomocą podzapytań):
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'
)
)
Jeśli masz więcej niż 2 płcie lub jeśli wolisz nie kodować na stałe Male
i Female
stałych w zapytaniu, można to przepisać 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
Powyższe zapytania mają zasadniczą różnicę. Pierwszy wynik daje tylko jednego mężczyznę i tylko jedną kobietę (co najwyżej). Drugie i trzecie zapytanie da ci więcej niż jedno, gdy jest wielu (mężczyzn) w tym samym maksymalnym wieku i podobnie dla kobiet.
Indeks (gender, age)
pomoże w obu zapytaniach.