2016-10-05 13 views
1

の最高値は、のは、これが表「transcations」であるとしましょう取得:関連する「second_type」列を示しながらオラクル - 各2種類

first_type  second_type  value 
m    t1    2 
a    t2    2 
a    t3    2 
b    t1    6 
g    t4    4 
b    t2    2 
r    t4    3 
m    t4    2 
g    t1    2 
b    t4    6 
a    t4    17 

は、どのように私は、各「first_type」の最大値を選択することができます所望の結果は次のとおり

first_type  second_type  value 
m    t1    2 
b    t1    6 
g    t4    4 
r    t4    3 
m    t4    2 
b    t4    6 
a    t4    17 

またはこのような「first_type」列の同じ値を持つ他の行を省略するだけで最高値、保つ:

first_type  second_type  value 
m    t1    2 
g    t4    4 
r    t4    3 
b    t4    6 
a    t4    17 
を0

'first_type'でグループ化しているときに最大値を選択しようとしましたが、グループ節にないものを選択できないため、 '第2のタイプ'を選択できません。

答えて

1

あなたが最大

select first_type, second_type, value 
from my_table 
where (first_type, value) in (select first_type, max(value) 
           from my_table 
           group by first_type) 
+0

でどこを使用することができますは、ID my_tableに別のselect文が何であるかを、ご回答ありがとうございましたか! –

+0

@youzking。同じですmy_tableは、実際のテーブルまたはdinamic一時テーブルです。 – scaisEdge

+0

しかし、ここではmy_tableは2回使用されるので、私は全体の選択ステートメント(一時データ)を複製する必要があります多くの時間とリソースが必要です –

2

あなたはrank()をしたい:

select first_type, second_type, value 
from (select t.*, 
      rank() over (partition by first_type order by value desc) as seqnum 
     from t 
    ) t 
where seqnum = 1; 

注:データが関係を持っているので、これはrank()を使用して、あなたはそれらのすべてをしたいです。