2016-04-06 2 views
0

У меня есть таблица с данными таблицы как флот данные:Выберите строки с максимальным значением столбца отдельной колонкой

enter image description here

Я пытаюсь получить MAX aircraft_count для каждого carriercode вместе с остальными столбцами ,

Я знаю, что это работает, но я не могу получить остальные столбцы

select carriercode, max(aircraft_count) as peak 
from fleet 
group by carriercode; 

Это ближайший я пришел.

select f1.id, distinct(f1.carriercode), f1.aircraft_count, f1."timestamp" 
from fleet f1 
where f1.aircraft_count = 
    (select max(f2.aircraft_count) 
    from fleet f2 
    where f1.carriercode = f2.carriercode) 
order by f1.aircraft_count desc; 

Ожидаемый результат:

id - carriercode - max_count - timestamp 
10 - EIN   - 100  - 2016-03-27 23:07:49.121449 
252 -SCO   - 34  - 2016-03-27 23:07:53.282367 

ответ

1

В Postgres можно использовать distinct on:

select distinct on (f.carriercode) f.* 
from fleet f 
order by carriercode, aircraft_count desc; 

Это возвращает одну строку для каждого carriercode, один с самым высоким aircraft_count. Если есть связи, то выбирается произвольная строка.

Если вы хотите все строки со спичками, то distinct on не совсем работает. Вместо этого:

select f.* 
from (select f.*, 
      dense_rank() over (partition by carrier_code order by aircraft_count desc) as seqnum 
     from fleet f 
    ) f 
where seqnum = 1; 
Смежные вопросы