标签归档:row_number

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    
   

mssql sqlserver 取分组数据中第一条数据的方法分享


摘要:
下文讲述通过sql脚本,获取分组数据的第一条记录的方法分享,如下所示:
实验环境:sqlserver 2008 R2


下文采用row_number 开窗函数对数据进行分组,并对组内数据生成新的组内编号,然后获取编号等于1的数据,即为组内第一条数据,如下所示:

select newName.* from
(select t.*,row_number() over (partition by [分组字段]  order by [排序字段] desc)  as [新编号] 
from [表名称] t)  newName
where [新编号]=1;