Jeśli używasz SQL-Server (minimum 2005), możesz użyć CTE
za pomocą ROW_NUMBER
funkcjonować. Możesz użyć CAST
dla wersji, aby uzyskać prawidłową kolejność:
WITH cte
AS (SELECT id,
userid,
version,
datetime,
Row_number()
OVER (
partition BY userid
ORDER BY Cast(version AS INT) DESC) rn
FROM [dbo].[table])
SELECT id,
userid,
version,
datetime
FROM cte
WHERE rn = 1
ORDER BY userid
ROW_NUMBER
zwraca zawsze jeden rekord, nawet jeśli istnieje wielu użytkowników z tą samą (górną) wersją. Jeśli chcesz zwrócić wszystkie „najlepsze rekordy-wersji użytkownika”, musisz zastąpić ROW_NUMBER
z DENSE_RANK
.