Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL - pilih catatan berbeda dalam satu bidang dengan catatan tertinggi dari bidang lain

SQL Server 2005+, Menggunakan 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+, Setara Non-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

Keduanya menggunakan ROW_NUMBER , yang hanya tersedia sejak 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. Fungsi String SQL Server (Daftar Lengkap)

  2. sql server menampilkan tanggal yang hilang

  3. Perbaiki Msg 8116 "Argument data type varchar is invalid for argument 1 of session_context function" di SQL Server

  4. Indeks SQL Server yang Tidak Digunakan

  5. Bagaimana cara mengatur batas waktu skrip SQL Server dari dalam skrip?