sql >> Database >  >> RDS >> Sqlserver

Selecteer de bovenste 1 rij van elke groep

Als u SQL-Server (minimaal 2005) gebruikt, kunt u een CTE . gebruiken met de ROW_NUMBER functie. U kunt CAST . gebruiken voor versie om de juiste volgorde te krijgen:

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 geeft altijd één record terug, ook als er meerdere gebruikers zijn met dezelfde (top)versie. Als u alle "top-version-user-records" wilt retourneren, moet u ROW_NUMBER vervangen met DENSE_RANK .



  1. Relationele versus niet-relationele databases - Deel 2

  2. SQL - Zoek of kolomdatums ten minste gedeeltelijk een datumbereik bevatten

  3. Een PHP PDO-verbinding krijgen van een mysql_connect()?

  4. mysqlclient installatiefout in AWS Elastic Beanstalk