最大行を取得するために同じテーブルを2回以上検索せずに、この行を実行するのは苦労しています。問題のテーブルはかなり大きいので、これは容認できません。私は、各IDが最新のラウンドで得た得点を返す必要がグループごとに1列の最大値を持つ行を返します
SCORES
ID ROUND SCORE
1 1 3
1 2 6
1 3 2
2 1 10
2 2 12
3 1 6
:ここ
は私のテーブルがどのようなものであるかです。つまり、最大(丸)の行であり、最大のスコアではありません。
OUTPUT:
ID ROUND SCORE
1 3 2
2 2 12
3 1 6
今私が持っている:
SELECT * FROM
(SELECT id, round,
CASE WHEN (MAX(round) OVER (PARTITION BY id)) = round THEN score ELSE NULL END score
FROM
SCORES
where id in (1,2,3)
) scorevals
WHERE
scorevals.round is not null;
これは動作しますが、かなり非効率的である私はちょうどでそれらの行をつかむないことができるはずとき(私は、手動でこれらのすべての行をフィルタリングする必要があります最初の場所。)
正しい値を取得するにはどうすればよいですか?
私はそれが好き。非常にきれいな。 – Jeremy