在 SQL SERVER 中仅选择具有 max(id) 的行

Mat*_*th9 1 sql sql-server sql-server-2008

我有一张表 A :

ID     | ProductCatId | ProductCode | Price
1      |       1      |  PROD0001   | 2
2      |       2      |  PROD0005   | 2
3      |       2      |  PROD0005   | 2
4      |       3      |  PROD0008   | 2
5      |       5      |  PROD0009   | 2
6      |       7      |  PROD0012   | 2
Run Code Online (Sandbox Code Playgroud)

我想选择 ID、ProductCatId、ProductCode、Price,条件为: “如果 ProductCatId 存在相同的值,则使用 max(ID) 获取 ProductCatId”,例如:

ID     | ProductCatId | ProductCode | Price
1      |       1      |  PROD0001   | 2
3      |       2      |  PROD0005   | 2
4      |       3      |  PROD0008   | 2
5      |       5      |  PROD0009   | 2
6      |       7      |  PROD0012   | 2
Run Code Online (Sandbox Code Playgroud)

ver*_*lli 6

寻找窗口函数和 row_number()

select ID , ProductCatId , ProductCode , Price
  from (
        select ID , ProductCatId , ProductCode , Price, row_number() over (partition by ProductCatId order by ID desc) as rn
         from myTable
        ) as t
  where t.rn = 1
Run Code Online (Sandbox Code Playgroud)