2016-04-06 8 views
0

ich eine Tabelle mit Daten als Flottentabellendaten habe:Wählen Sie Zeilen mit maximalem Spaltenwert deutlicher Spalte

enter image description here

Ich versuche, den MAX aircraft_count für jeden carriercode zusammen mit dem Rest der Säulen zu erhalten .

Ich weiß, das funktioniert, aber ich kann nicht den Rest der Spalten

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

Dies ist das nächste, was ich bin gekommen, bekommen.

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; 

Erwartetes Ergebnis:

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 

Antwort

1

In Postgres, Sie distinct on verwenden können:

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

Dies gibt eine Zeile pro carriercode, die mit der höchsten aircraft_count. Wenn Bindungen vorhanden sind, wird eine beliebige Zeile ausgewählt.

Wenn Sie alle Zeilen mit Übereinstimmungen möchten, dann funktioniert distinct on nicht ganz. Stattdessen:

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; 
Verwandte Themen