Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL - chọn các bản ghi riêng biệt trong một trường với các bản ghi cao nhất từ ​​trường khác

SQL Server 2005+, Sử dụng 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+, Tương đương Không phải 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

Cả hai đều sử dụng ROW_NUMBER , chỉ khả dụng kể từ 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. Biết khi nào cần thử lại hoặc không thành công khi gọi SQL Server từ C #?

  2. chọn * từ bảng so với chọn colA, colB, v.v. từ hành vi thú vị của bảng trong SQL Server 2005

  3. Thủ tục được lưu trữ - trả về danh tính dưới dạng tham số đầu ra hoặc đại lượng vô hướng

  4. Kiểm tra xem bảng có tồn tại trong SQL Server không

  5. Giới hạn bộ nhớ trong SQL Server 2016 SP1