То, что вы хотите, попадает в тег [greatest-n-per-group]
.Один из способов достижения результата:
SELECT
t.CategoryId
, t.Score
FROM
( SELECT
CategoryId
, MAX(ScoreDate) AS LastScoreDate
FROM
TableX
WHERE
ObjectId = @ObjectId
GROUP BY
CategoryId
) AS grp
JOIN
TableX AS t
ON grp.Category = t.CategoryId
AND grp.LastScoreDate = t.ScoreDate
WHERE
t.ObjectId = @ObjectId