Điều này cũng có thể thực hiện được mà không cần truy vấn con:
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;
Trả về chính xác những gì bạn yêu cầu.
Điểm quan trọng là DISTINCT
được áp dụng sau chức năng cửa sổ.
SQL Fiddle.
Có thể nhanh hơn vì nó sử dụng cùng một cửa sổ hai lần:
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;
Nếu không thì làm tương tự.