Ceci est également possible sans sous-requête :
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;
Renvoie exactement ce que vous avez demandé.
Le point crucial est que DISTINCT
est appliqué après fonctions de fenêtre.
Violon SQL.
Peut-être plus rapide car il utilise deux fois la même fenêtre :
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;
Sinon faire la même chose.