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

Chọn 1 hàng trên cùng từ mỗi nhóm

Nếu bạn sử dụng SQL-Server (tối thiểu 2005), bạn có thể sử dụng CTE với ROW_NUMBER hàm số. Bạn có thể sử dụng CAST cho phiên bản để có được thứ tự chính xác:

WITH cte 
     AS (SELECT id, 
                userid, 
                version, 
                datetime, 
                Row_number() 
                  OVER ( 
                    partition BY userid 
                    ORDER BY Cast(version AS INT) DESC) rn 
         FROM   [dbo].[table]) 
SELECT id, 
       userid, 
       version, 
       datetime 
FROM   cte 
WHERE  rn = 1 
ORDER BY userid

Demo

ROW_NUMBER luôn trả về một bản ghi ngay cả khi có nhiều người dùng với cùng một phiên bản (trên cùng). Nếu bạn muốn trả lại tất cả "bản ghi người dùng-phiên bản hàng đầu", bạn phải thay thế ROW_NUMBER với DENSE_RANK .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Máy chủ Sql trong đó mệnh đề giữa hai ngày không đưa ra kết quả mong đợi

  2. Cách nhanh chóng để tìm cách sử dụng của Đối tượng DB trong SQL Server 2008?

  3. LOG10 () Ví dụ trong SQL Server

  4. Chỉ định thông tin đăng nhập cho người dùng được tạo mà không cần đăng nhập (SQL Server)

  5. Việc chuyển đổi kiểu dữ liệu datetime2 thành kiểu dữ liệu smalldatetime dẫn đến giá trị nằm ngoài phạm vi. \ R \ n Câu lệnh đã bị chấm dứt