私はこの問題の解決策をいくつか見つけましたが、Oracleではうまくいかないようです。Oracleで各グループの最大値を取得する方法は?
私はこれだ:私は各チームの最古の人物についてのみの情報を提示するビューを望む
を。ですから、私の出力は次のようになります。
PERSON | TEAM | AGE
Sam | 1 | 23
Michael | 2 | 21
私はOracleでどうやってそれを行うことができますか?
私はこの問題の解決策をいくつか見つけましたが、Oracleではうまくいかないようです。Oracleで各グループの最大値を取得する方法は?
私はこれだ:私は各チームの最古の人物についてのみの情報を提示するビューを望む
を。ですから、私の出力は次のようになります。
PERSON | TEAM | AGE
Sam | 1 | 23
Michael | 2 | 21
私はOracleでどうやってそれを行うことができますか?
一つの方法は、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
はかなりうまく動作します。ここで
は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;
select * from table
where (team, age) in (select team, max(age) from table group by team)
このメソッドは動作しますが、しかし、任意の簡単な方法はありますか?教師は決して私たちに "keep"を教えたことはありません – ItsLavishBitch
私はあなたがここに見られるすべての回答の中で最も簡単な方法であると考えています。ただし、[FIRST](https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions056.htm)はよく知られているものではありません。 –