Isso também é possível sem subconsulta:
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;
Retorna exatamente o que você pediu.
O ponto crucial é que
DISTINCT
é aplicado depois funções da janela. violino SQL.
Talvez mais rápido porque usa a mesma janela duas vezes:
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;
Caso contrário, fazendo o mesmo.