Jest to również możliwe bez podzapytania:
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;
Zwraca dokładnie to, o co prosiłeś.
Najważniejsze jest to, że DISTINCT
jest stosowany po funkcje okna.
Skrzypce SQL.
Może szybciej, ponieważ używa dwa razy tego samego okna:
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;
W przeciwnym razie robi to samo.