Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL - wybierz różne rekordy w jednym polu z najwyższymi rekordami z innego pola

SQL Server 2005+, przy użyciu 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+, odpowiednik bez 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

Oba używają ROW_NUMBER , który jest dostępny tylko od 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. Co oznacza FixedLenNullInSource w sp_help?

  2. Łączenie ciągów t-sql

  3. Jak mogę utworzyć ograniczenie CHECK na kolumnie VARCHAR w SQL Server, określając minimalną długość danych?

  4. Jakiego rozmiaru używasz dla varchar(MAX) w deklaracji parametru?

  5. Jak wybrać ostatnie 5 wierszy w tabeli bez sortowania?