Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Sélectionnez la première ligne de chaque groupe

Si vous utilisez SQL-Server (minimum 2005) vous pouvez utiliser un CTE avec le ROW_NUMBER fonction. Vous pouvez utiliser CAST pour la version pour obtenir le bon ordre :

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

Démo

ROW_NUMBER renvoie toujours un enregistrement même s'il y a plusieurs utilisateurs avec la même version (top). Si vous souhaitez renvoyer tous les "top-version-user-records", vous devez remplacer ROW_NUMBER avec DENSE_RANK .