Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Seleziona la prima riga di ogni gruppo

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

Dimostrazione

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 .