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
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
.