我有一个数据表作为车队表数据:
我试图为每个aircraft_count
获取MAX 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
答案 0 :(得分: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;