Вы начинаете с подзапроса, чтобы получить самую раннюю дату рождения в каждом коде области.
SELECT A.areaId, MIN(birthDate) earliestBirthDate
FROM Area A
JOIN Person P ON A.areaId = p.areaId
GROUP BY A.areaId
Вы можете попробовать этот подзапрос, чтобы убедиться, что он дает ровно одну строку на areaId, показывая необходимую самую раннюю дату рождения.
Затем вы присоединяетесь к подзапросу к вашему подробному запросу
SELECT P.personName, A.areaCode, P.birthDate
FROM Person P
JOIN Area A ON P.areaId = A.areaId
JOIN (
SELECT A.areaId, MIN(birthDate) earliestBirthDate
FROM Area A
JOIN Person P ON A.areaId = p.areaId
GROUP BY A.areaId
) EARLY ON P.areaId = EARLY.areaID
ORDER BY EARLY.earliestBirthDate, P.birthDate, A.areaCode
Хитрость заключается в том, чтобы использовать подзапрос для создания виртуальной таблицы , чтобы вы могли заказать столбец из этой таблицы.
Pro tip : Если вы используете SELECT DISTINCT
для извлечения подробных данных из таблиц, это флаг предостережения. Вы можете делать что-то не так.