Как получить только одну строку после использования функции Max, когда другое поле имеет другие значения? - PullRequest
0 голосов
/ 16 апреля 2020

Я использую этот код:

select row1, row2, max(row3) as max_row3 from table
group by row1, row2
order by row1

Мой вывод выглядит так:

row1    row2    max_row3
A       123     29.27 <-- Max for A
A       456     5.86
B       123     34.46
B       456     25.82
B       789     59.46 <-- Max for B

Я хочу, чтобы он выглядел следующим образом:

row1    row2    max_row3
A       123     29.27
B       789     59.46

Спасибо за вашу помощь.

Ответы [ 3 ]

0 голосов
/ 16 апреля 2020

Один из вариантов - это коррелированный подзапрос:

select t.*
from mytable t
where t.row3 = (
    select max(t1.row3) from mytable t1 where t1.row1 = t.row1 and t1.row2 = t.row2
)

Для выполнения этого запроса требуется индекс (row1, row2, row3).

.
0 голосов
/ 16 апреля 2020

Вы можете использовать ROW_NUMBER() для идентификации нужных вам данных:

select *  
from (
  select
    *,
    row_number() over(partition by row1 order by row3 desc) as rn
  from t
) x
where rn = 1
0 голосов
/ 16 апреля 2020

Использовать оконные функции:

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