Вам даже не нужно идти на вложенный запрос. Поскольку вы используете Oracle, вы можете использовать Аналитические функции . Ну, немного подзапроса все еще необходимо, так как аналитическая функция не переходит непосредственно в условие WHERE (она запускается после условия where, которое оценивается).
SELECT
pid,
model,
hourslogged,
FROM (
SELECT
pid,
model,
hourslogged,
ROW_NUMBER() OVER (PARTITION BY model ORDER BY hourslogged DESC) AS rn
FROM flightskills
) WHERE rn = 1
Вы можете использовать различные методологии ранжирования вместо простых ROW_NUMBER
. Например, DENSE_RANK
будет обрабатывать ситуацию, когда два пилота будут регистрировать одинаковое количество часов по-разному (они будут показывать оба, а не случайно один из двух).
Вышеописанный подход идет сразу после верхней записи hourslogged
для каждой модели. Вы делаете это в два шага 1. / Ранг 2. / Выберите верхний ранг (rn = 1
).