sql >> Database >  >> RDS >> Sqlserver

SQL - selecteer afzonderlijke records in het ene veld met de hoogste records uit een ander veld

SQL Server 2005+, met 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+, niet-CTE-equivalent:

  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

Beide gebruiken ROW_NUMBER , die pas sinds SQL Server 2005 beschikbaar is.



  1. Hoe ORA-29280 op te lossen:ongeldig mappad

  2. Wat is het verschil tussen door komma's gescheiden joins en join op syntaxis in MySQL?

  3. Oracle SQL - retourneer een standaardwaarde als query geen resultaten oplevert

  4. Count() en left join probleem