Se utilizzi SQL-Server (minimo 2005) puoi utilizzare un CTE
con il ROW_NUMBER
funzione. Puoi usare CAST
per la versione per ottenere l'ordine corretto:
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
restituisce sempre un record anche se sono presenti più utenti con la stessa versione (principale). Se vuoi restituire tutti i "record utente-versione-top", devi sostituire ROW_NUMBER
con DENSE_RANK
.