很多时候我们查询数据都是查询最大值或者最小值,一般都是利用Max或者Min函数来实现,一般很少求次大值的,其实实现也很简单,记录一下为大家提供一下思路,这篇博客介绍一下利用ROW_NUMBER PARTITION BY怎么求次大值(次小值)。
测试数据:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([Name] nvarchar(22),[Score] int)
Insert #T
select N'张三',80 union all
select N'张三',90 union all
select N'张三',100 union all
select N'李四',60 union all
select N'李四',65 union all
select N'李四',70 union all
select N'李四',75
Go
--测试数据结束
实现方式:
;WITH cte AS (
Select *,ROW_NUMBER()OVER(PARTITION BY Name ORDER BY Score DESC) rn from #T
)
SELECT * FROM cte WHERE cte.rn=2
结果: