Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL - изберете отделни записи в едно поле с най-високи записи от друго поле

SQL Server 2005+, използване на 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+, не-CTE еквивалент:

  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

И двете използват ROW_NUMBER , който е достъпен само след SQL Server 2005.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Промяна на колона, добавяне на ограничение по подразбиране

  2. BULK вмъкване с FIRE_TRIGGERS не изпълнява тригера

  3. За да получите дата от datetime в sql

  4. Как да намеря текст в процедурите/тригерите на SQL Server?

  5. Как да създадете таблица в SQL Server с помощта на заявка