Si usa SQL-Server (mínimo 2005) puede usar un CTE
con el ROW_NUMBER
función. Puedes usar CAST
para que la versión obtenga el orden correcto:
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
devuelve siempre un registro, incluso si hay varios usuarios con la misma versión (superior). Si desea devolver todos los "registros de usuario de versión superior", debe reemplazar ROW_NUMBER
con DENSE_RANK
.