sql >> Base de Datos >  >> RDS >> Sqlserver

Seleccione la primera fila de cada grupo

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

Demostración

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 .