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

SQL - vælg forskellige poster i ét felt med de højeste poster fra et andet felt

SQL Server 2005+, ved hjælp af CTE:

WITH rows AS (
  SELECT t.id,
         t.staff_id,
         t.skill_id,
         t.mainskill,
         ROW_NUMBER() OVER (PARTITION BY t.staff_id ORDER BY t.mainskill DESC) AS rank
    FROM TABLE t)
  SELECT r.id,
         r.staff_id,
         r.skill_id,
         r.mainskill
    FROM rows r
   WHERE r.rank = 1
ORDER BY r.staff_id

SQL Server 2005+, ikke-CTE-ækvivalent:

  SELECT r.id,
         r.staff_id,
         r.skill_id,
         r.mainskill
    FROM (SELECT t.id,
                 t.staff_id,
                 t.skill_id,
                 t.mainskill,
                 ROW_NUMBER() OVER (PARTITION BY t.staff_id ORDER BY t.mainskill DESC) AS rank
            FROM TABLE t) r
   WHERE r.rank = 1
ORDER BY r.staff_id

Begge bruger ROW_NUMBER , som kun er tilgængelig siden SQL Server 2005.



  1. mysql:fjern rækker med gentagne værdier med betingelse (gentagne kolonner)

  2. Befolker Php-rullelisten fra mysql-databasen

  3. Brug af Babel i produktionen - Sådan prækompilerer du scripts

  4. Kan ikke udføre forespørgsler, mens andre ubuffrede forespørgsler er aktive fejl i loop