zhangxinba 发表于 2017-12-14 13:47:28

记一个常见的ms sql server中取第N条记录的方法

前言
  好好学习,天天向上。

正文
  好像也是一个不难的问题,刚视频里看到的,就记一下吧。
  下面是表中原始的数据结构,做了一个倒叙排序:
  

select * from Employee order by Salary desc  


  首先来看一下如何取Salary第二的记录。
  

--获取salary排行第二的人的信息  
select top 1 * from Employee where Salary < (select max(salary) from Employee ) order by Salary desc
  


  原理是先获取到最大的salary-maxSalary,然后根据salary降序排序,取第一条salary小于该maxSalary的记录.
  下面来看一下如何取Salary第三的记录
  

--获取salary排行第三的人的信息  
select top 1 * from (
  
select top 3 * from Employee order by Salary desc
  
) as result
  
order by Salary asc
  

  原理是先根据Salary降序排序获取到前3条记录,作为Result一个结果集

  然后再在这个结果集里面用Salary升序排序,取第一条。

  下面再来看一下使用ROW_NUMBER(顺道试验了Rank,Dense_Rank这两个函数)这个函数的写法:
  

--获取salary排行第三的人的信息  
select * from (
  
select * ,row_number () over (order by salary desc) as RowNumber,RANK() over (order by salary desc) as RankNumber,DENSE_RANK() over (order by salary desc) as DenseRankNumber from Employee
  
) as Result
  
where Result.RowNumber =3
  

  先看一下Result这个函数的结果集:

  注意一下B和C的salary是一样的,但是得到的3个number值是不同的,项目中看具体情况,选择需要的函数。
  我们这里取RowNumber.

  结果也是一样的。
  就到这里吧。
页: [1]
查看完整版本: 记一个常见的ms sql server中取第N条记录的方法