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

前言

好好学习,天天向上。

正文

好像也是一个不难的问题,刚视频里看到的,就记一下吧。

下面是表中原始的数据结构,做了一个倒叙排序:

select * from Employee order by Salary desc

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

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

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

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

原理是先获取到最大的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一个结果集

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

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

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

下面再来看一下使用ROW_NUMBER(顺道试验了RankDense_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这个函数的结果集:

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

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

我们这里取RowNumber.

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

结果也是一样的。

就到这里吧。

上一篇:k8s-v1.20安装metrics-server


下一篇:Immutable.js 以及在 react+redux 项目中的实践