Това е възможно и без подзаявка:
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 Fiddle.
Може би по-бързо, защото използва един и същ прозорец два пъти:
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;
В противен случай правим същото.