Dies ist auch ohne Unterabfrage möglich:
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;
Gibt genau das zurück, wonach Sie gefragt haben.
Der entscheidende Punkt ist, dass DISTINCT
wird nach angewendet Fensterfunktionen.
SQL-Geige.
Vielleicht schneller, weil es zweimal dasselbe Fenster verwendet:
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;
Ansonsten dasselbe tun.