これはサブクエリなしでも可能です:
SELECT DISTINCT
id
,max(round) OVER (PARTITION BY id) AS round
,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score
FROM SCORES
WHERE id IN (1,2,3)
ORDER BY id;
要求したものを正確に返します。
重要なポイントは、DISTINCT
です。 後に適用されます ウィンドウ関数。
SQLフィドル。
同じウィンドウを2回使用するため、おそらく高速です:
SELECT DISTINCT
id
,first_value(round) OVER (PARTITION BY id ORDER BY round DESC) AS round
,first_value(score) OVER (PARTITION BY id ORDER BY round DESC) AS score
FROM SCORES
WHERE id IN (1,2,3)
ORDER BY id;
それ以外の場合も同じようにします。