Esto también es posible sin 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;
Devuelve exactamente lo que solicitó.
El punto crucial es que DISTINCT
se aplica después funciones de ventana.
Violín SQL.
Quizás más rápido porque usa la misma ventana dos veces:
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;
De lo contrario haciendo lo mismo.