Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Selecione a primeira linha de cada grupo


Se você usa SQL-Server (mínimo 2005) você pode usar um CTE com o ROW_NUMBER função. Você pode usar CAST para versão para obter a ordem correta:
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

Demonstração

ROW_NUMBER retorna sempre um registro mesmo se houver vários usuários com a mesma versão (principal). Se você deseja retornar todos os "registros de usuário da versão superior", você deve substituir ROW_NUMBER com DENSE_RANK .