mssql sqlserver 获取数据表中某一列的”次大值或次小值”的方法分享


摘要:
下文获取群组数据后的第n大的数或倒数第n小的数,如下所示:
实验环境:sql server 2008 R2


在使用sql脚本进行数据查询时,我们通常可用使用max min函数获取指定列的最大值和最小值,但当我们想获取第二大的值时,没有现成的函数使用,此时我们需使开窗函数row_number对群组后的数据进行排序,然后获取相应的值
例:

 
     create table #maomao([sort] nvarchar(30),[qty] int)
       insert into #maomao
       select N'香水类',9 union all
       select N'香水类',18 union all
       select N'香水类',20 union all
       select N'导航类',16 union all
       select N'导航类',13 union all
       select N'导航类',17 union all
       select N'导航类',22
       go
        ---获取每一类中 qty排名第二的值
       ;WITH tmp AS (
          select *,ROW_NUMBER()OVER(PARTITION BY sort ORDER BY qty DESC) rank from #maomao
         )
        SELECT * FROM tmp WHERE tmp.rank=2

       go
  
       truncate table #maomao
       drop     table #maomao