zoukankan      html  css  js  c++  java
  • 记一个常见的ms sql server中取第N条记录的方法

    前言

    好好学习,天天向上。

    正文

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

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

    select * from Employee order by Salary desc

    微信截图_20170208165800

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

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

    微信截图_20170208170928

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

    微信截图_20170208171031

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

    微信截图_20170208171001

    下面再来看一下使用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这个函数的结果集:

    微信截图_20170208172508

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

    我们这里取RowNumber.

    微信截图_20170208171001

    结果也是一样的。

    就到这里吧。

  • 相关阅读:
    Linux内核架构读书笔记
    Linux内核container_of 宏
    Linux内核架构读书笔记
    Linux内核架构读书笔记
    Linux内核架构读书笔记
    Linux内核架构读书笔记- 2.4.1 进程复制
    作业07:字符串索引与切片
    作业06:数字类型
    作业04:逻辑运算
    作业05:用户登录(三次机会)且每次输入错误显示剩余次数
  • 原文地址:https://www.cnblogs.com/sheldon-lou/p/6378979.html
Copyright © 2011-2022 走看看