目录
1、使用场景
常见于获取历史记录表,取最新变更记录。
例如某个事件 同一天产生多条记录,想获取当天最新的一条记录内容。
很多人想到 是不是 max函数也可以实现。是可以实现,但有时存在一定局限。
2、示例
row_number() over(partition by 需要分组列名 order by 排序列 desc)
源数据如下:
需求描述:获取不同ID最新版本 Words
Code 如下
/****** Script for SelectTopNRows command from SSMS ******/
SELECT
[FldID]
,[ID]
,[Words]
,[Rev]
FROM [AzureDevOps_YouDefaultCollection].[dbo].[WorkItemLongTexts]
WHERE FldID=52
SELECT
[FldID]
,[ID]
,[Words]
,[Rev]
,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY Rev DESC) as NewRev
INTO #Temp
FROM [AzureDevOps_YouDefaultCollection].[dbo].[WorkItemLongTexts]
WHERE FldID=52
SELECT [FldID]
,[ID]
,[Words]
,[Rev]
,[NewRev]
FROM #Temp
--NewRev=1,即是最新的
SELECT [FldID]
,[ID]
,[Words]
,[Rev]
FROM #Temp
WHERE NewRev=1