sql >> Databasteknik >  >> RDS >> Sqlserver

Välj den översta raden från varje grupp

Om du använder SQL-Server (minst 2005) kan du använda en CTE med ROW_NUMBER fungera. Du kan använda CAST för version för att få rätt ordning:

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 returnerar alltid en post även om det finns flera användare med samma (översta) version. Om du vill returnera alla "top-version-user-records" måste du ersätta ROW_NUMBER med DENSE_RANK .



  1. Oracle UNION Operatör förklaras

  2. Kontrollera om en icke-LOB-kolumn behöver uppdateras

  3. Ansluter till AWS RDS via PDO

  4. Hur formaterar man intervalltyp till HH:MM-format?