Anda bisa mendapatkan semua data baris yang menggabungkan ORDER BY
dan LIMIT 1
. Dalam kasus Anda, gunakan ini dua kali dan gabungkan dengan 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
)
Cara lain adalah menentukan usia maksimum pria dan wanita (dengan subkueri):
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'
)
)
Jika Anda memiliki lebih dari 2 jenis kelamin atau jika Anda memilih untuk tidak melakukan hardcode Male
dan Female
konstanta dalam kueri, ini dapat ditulis ulang sebagai:
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
Pertanyaan di atas memiliki perbedaan utama. Yang pertama hanya akan memberi Anda satu hasil pria dan hanya satu wanita (paling banyak). Kueri ke-2 dan ke-3 akan memberi Anda lebih dari satu bila ada banyak (laki-laki) dengan usia maksimum yang sama dan sama untuk perempuan.
Sebuah indeks pada (gender, age)
akan membantu salah satu pertanyaan.