Вы можете использовать CTE (общее табличное выражение) с функцией ROW_NUMBER
:
;WITH LastPerUser AS
(
SELECT
ID, UserID, ClassID, SchoolID, Created,
ROW_NUMBER() OVER(PARTITION BY UserID ORDER BY Created DESC) AS 'RowNum')
FROM dbo.YourTable
)
SELECT
ID, UserID, ClassID, SchoolID, Created,
FROM LastPerUser
WHERE RowNum = 1
Этот CTE «разбивает» ваши данные на UserID
, и для каждого раздела функция ROW_NUMBER
выдает последовательные числа, начиная с 1 и упорядочивая по Created DESC
- так что последняя строка получает RowNum = 1
каждый UserID
), который я выбираю из CTE в операторе SELECT после него.