标签归档:row_number应用

mssql sqlserver 取分组后数值最后一条数据的方法分享


摘要:
下文通过实例的方式讲述,取学生成绩表中各科成绩最后一名的方法.
实验环境:sql server 2008 R2



实现思路:
使用row_number对数据进行分组,(按成绩从小到大进行组内排序,并生成组内编号)

例:

  create table [maomao365.com]
(keChengName nvarchar(30),
 chengJi     decimal(18,1),
 name        nvarchar(10)
 )
 go
 insert into [maomao365.com]
 (keChengName,chengJi,name)values
 ('语文',98,'张三'),
 ('数学',92,'张三'),
 ('语文',90,'李四'),
 ('数学',100,'李四'),
 ('语文',83,'王二'),
 ('数学',98,'王二')
 go
 
 --方式2:使用开窗函数分组排序后,再获取每科的最低分
  
  select * from 
  (
  select row_number()
   over(partition by keChengName  order by chengJi asc ) as keyId 
   ,* from [maomao365.com]
   ) t where t.keyId =1 
   go
 

 go
 truncate table [maomao365.com]
 drop table [maomao365.com]

mssql sqlserver 将select输出结果加上序号的两种方法分享


摘要:
在平常的报表查询中,我们时常需要将查询出的结果重新编号,并返回新的编号给客户端,下文将通过举例的方式,讲述如何对查询出的结果进行编号,如下所示:
实验环境:sql server 2008 R2


下文将通过例子讲述对输出结果进行编号的方法:

实现思路:
使用开窗函数 row_number 或 rank 对数据重新编号。

   create table [maomao365.com]
    (sort varchar(10),
     info  varchar(30)
    )
     go
 
     ---生成基础数据
     insert into [maomao365.com](sort, info)values
        ('sql','爱好者'),('mssql','数据库'),('sqlblog','个人脚本记载器')
      go
   
      ---方式1:使用row_number函数重新编号
      select ROW_NUMBER() OVER (ORDER BY a.info ASC) AS [序号],
                 a.* from  [maomao365.com]  a 
     
     ---方式1:使用rank函数重新编号
      select Rank() OVER (ORDER BY a.info ASC) AS [序号],
                 a.* from  [maomao365.com]  a 
     
    go
    truncate table [maomao365.com]
    drop       table [maomao365.com]

mssql sqlserver sql数据分组后,取分组后最新一条记录的方法分享


摘要:
下文讲述对通过举例的方式分享,“sql分组后,取最新一条记录的方法”,如下所示:
实验环境:sql server 2008 R2


例:
取销售订单中,每个客户最近的一条订单记录。
实验思路:
使用row_number() 对数据进行群组,群组内按照订单日期倒序排序,并生成新的群组内编号

   create table [maomao365](orderNo varchar(30),custName nvarchar(30),
     qty int, amount decimal(18,2),
     orderDate datetime)
    go
    ---生成订单数据
    insert into [maomao365](orderNo,custName,qty,amount,orderDate)
     values
     ('001','深圳A集团',8,10,'2018-1-1'),
     ('002','深圳A集团',7,1008,'2018-1-2'),
     ('003','深圳C集团',6,100,'2018-1-3'),
     ('004','深圳C集团',12,1090,'2018-1-4'),
     ('005','深圳B集团',5,108,'2018-1-5'),
     ('006','深圳B集团',16,190,'2018-1-6'),
     ('007','深圳D集团',10,90,'2018-1-7'),
     ('008','深圳D集团',4,40,'2018-1-8'),
     ('009','深圳E集团',6,60,'2018-1-9')
     go
     ---显示每个客户最新一条订单记录
     select * from 
     (
       select row_number() over(partition by [custName] order by [orderDate] desc ) as keyId,* from [maomao365]   
     )
     as t 
     where t.keyId =1 
    go
    
   go 
   truncate table [maomao365]
   drop       table [maomao365]