Questo è possibile anche senza subquery:
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;
Restituisce esattamente ciò che hai chiesto.
Il punto cruciale è che DISTINCT
viene applicato dopo funzioni della finestra.
SQL Violino.
Forse più veloce perché usa la stessa finestra due volte:
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;
Altrimenti facendo lo stesso.