Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wählen Sie die oberste 1 Reihe aus jeder Gruppe aus

Wenn Sie SQL-Server (mindestens 2005) verwenden, können Sie einen CTE verwenden mit ROW_NUMBER Funktion. Sie können CAST verwenden für Version, um die richtige Reihenfolge zu erhalten:

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

Demo

ROW_NUMBER gibt immer einen Datensatz zurück, auch wenn es mehrere Benutzer mit der gleichen (obersten) Version gibt. Wenn Sie alle "Top-Version-User-Records" zurückgeben möchten, müssen Sie ROW_NUMBER ersetzen mit DENSE_RANK .