Выбор строк с максимальным значением в запросе Oracle - PullRequest
0 голосов
/ 20 мая 2018

Допустим, у меня есть следующие строки в моей базе данных Oracle:

N783AS          6 WA
N794SW          2 WA
N407SW          2 WI
N471CA         10 WI
N479CA          6 WI
N494CA          5 WI
N495CA          7 WI
N496CA         12 WI
N498CA          9 WI
N506CA          8 WI
N507CA          6 WI

Что я хотел бы получить, это:

N496CA         12 WI
N783AS          6 WA

Итак, что я должен сделатькаким-то образом получить для каждого состояния (третий столбец) строку с максимальным значением второго столбца.Как я могу это сделать?

1 Ответ

0 голосов
/ 20 мая 2018

Самый простой способ - это коррелированный подзапрос в предложении where:

select t.*
from t
where t.col2 = (select max(t2.col2) from t t2 where t2.col3 = t.col3);

С индексом (col3, col2) это, вероятно, самое эффективное решение, но оно может возвращать дубликаты.Чтобы избежать этого, вы можете использовать row_number():

select t.*
from (select t.*,
             row_number() over (partition by col3 order by col2 desc) as seqnum
      from t
     ) t
where seqnum = 1;

Или, в некоторых случаях, это может иметь лучшую производительность:

select max(col1) keep (dense_rank first order by col2 desc), max(col2), col3
 from t
group by col3;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...