2017-07-25 35 views
0

のデータを引っ張っ:は、私は次のような列を持つテーブル構造を持っている最大のフィールドから

ID | line | value 
1 | 1 | 10 
1 | 2 | 5 
2 | 1 | 6 
3 | 1 | 7 
3 | 2 | 4 

理想的に、私は次のことを引っ張ってみたい:

ID | value 
1 | 5 
2 | 6 
3 | 4 

一つの解決策は、になります次のような何か:

select a.ID, a.value 
from 
myTable a 
inner join (select id, max(line) as line from myTable group by id) b 
    on a.id = b.id and a.line = b.line 

テーブルの大きさを考えると、これは大きなプルのほんの一部であると、私は思いますこれを直接的に引き上げるよりエレガントでシンプルな方法があるかどうかを確認するのが好きです。

答えて

2

これは、OLAP関数のための作業です:彼らは同じMAXラインを共有する場合

select * 
from myTable a 
qualify 
    rank() -- assign a rank for each id 
    over (partition by id 
     order by line desc) = 1 

はIDごとに複数行を返すことがあります。それらのうちの1つだけを返す場合は、別の列をorder byに追加して一意にするか、row_numberに切り替えて、不確定行を取得します。

+0

ありがとう、私はチャンスがあるとすぐに、私は潜んでいきます。良いニュースは、IDと行の組み合わせは一意の識別子です。 – user3654225

関連する問題