前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记一个常见的ms sql server中取第N条记录的方法

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

作者头像
_淡定_
发布2018-08-24 10:46:34
7890
发布2018-08-24 10:46:34
举报
文章被收录于专栏:dotnet & javadotnet & java

前言

好好学习,天天向上。

正文

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

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

代码语言:javascript
复制
select * from Employee order by Salary desc
微信截图_20170208165800
微信截图_20170208165800

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

代码语言:javascript
复制
--获取salary排行第二的人的信息
select top 1 * from Employee where Salary < (select max(salary) from Employee ) order by Salary desc
微信截图_20170208170928
微信截图_20170208170928

原理是先获取到最大的salary-maxSalary,然后根据salary降序排序,取第一条salary小于该maxSalary的记录.

下面来看一下如何取Salary第三的记录

代码语言:javascript
复制
--获取salary排行第三的人的信息
select top 1 * from (
select top 3 * from Employee order by Salary desc
) as result
order by Salary asc

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

微信截图_20170208171031
微信截图_20170208171031

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

微信截图_20170208171001
微信截图_20170208171001

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

代码语言:javascript
复制
--获取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这个函数的结果集:

微信截图_20170208172508
微信截图_20170208172508

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

我们这里取RowNumber.

微信截图_20170208171001
微信截图_20170208171001

结果也是一样的。

就到这里吧。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-02-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 正文
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档