2016-12-02 22 views
0

私はこの問題の解決策をいくつか見つけましたが、Oracleではうまくいかないようです。Oracleで各グループの最大値を取得する方法は?

私はこれだ:私は各チームの最古の人物についてのみの情報を提示するビューを望む

enter image description here

を。ですから、私の出力は次のようになります。

PERSON | TEAM | AGE 
Sam  | 1 | 23 
Michael | 2 | 21 

私はOracleでどうやってそれを行うことができますか?

答えて

2

一つの方法は、keepを使用しています。

select team, max(age) as age, 
     max(person) keep (dense_rank first order by age desc) as person 
from t 
group by team; 

あり、他の方法がありますが、私の経験では、keepはかなりうまく動作します。ここで

+0

このメソッドは動作しますが、しかし、任意の簡単な方法はありますか?教師は決して私たちに "keep"を教えたことはありません – ItsLavishBitch

+0

私はあなたがここに見られるすべての回答の中で最も簡単な方法であると考えています。ただし、[FIRST](https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions056.htm)はよく知られているものではありません。 –

2

keepなししかしrow_number()と例です。

with t0 as 
(
    select person, team, age, 
    row_number() over(partition by team order by age desc) as rn 
    from t 
) 
select person, team, age 
from t0 
where rn = 1; 
0
select * from table 
where (team, age) in (select team, max(age) from table group by team) 
関連する問題