关于用sql在结果集中查找第N条数据

shijies 2018-03-11 01:12:49
在网上搜了一下有两种方法:

第一种


select top 1 * from (select top N * FROM <span style="font-family: Arial, Helvetica, sans-serif;">TableName </span>order by ID asc)as A order by A.ID desc




第二种



使用 row_number() over()




SELECT * from (select *,ROW_NUMBER()over(order by ID)as num FROM TableName)as B where B.num=N



没有搞明白怎么用
...全文
455 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 版主 2018-03-12
  • 打赏
  • 举报
回复
SELECT  *
FROM    ( SELECT    * ,
                    ROW_NUMBER() OVER ( ORDER BY ID ) AS num  --这里要有order by
          FROM      数据资料表
        ) AS B
WHERE   B.num = 3  
吉普赛的歌 版主 2018-03-12
  • 打赏
  • 举报
回复
引用 2 楼 shijies 的回复:
我以下列语句查询数据资料表的第三个记录, SELECT * from (select *,ROW_NUMBER()over()as num FROM 数据资料表)as B where B.num=3 运行后显示: 消息 4112,级别 15,状态 1,第 1 行 函数“ROW_NUMBER”必须有包含 ORDER BY 的 OVER 子句。
SQL Server必须明白你按什么排序, 才方便给你取第几条数据,你仔细想想是不是这个道理? 当然, 也可以按“默认顺序”,select 1 :
SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS rid,*
FROM   MASTER.dbo.spt_values AS sv 
WHERE sv.[type]='P'
但不推荐, 有一个明确的顺序(最好是主键id或其它的唯一字段)是最好的。
shijies 2018-03-11
  • 打赏
  • 举报
回复
我以下列语句查询数据资料表的第三个记录, SELECT * from (select *,ROW_NUMBER()over()as num FROM 数据资料表)as B where B.num=3 运行后显示: 消息 4112,级别 15,状态 1,第 1 行 函数“ROW_NUMBER”必须有包含 ORDER BY 的 OVER 子句。
早起晚睡 2018-03-11
  • 打赏
  • 举报
回复
引用 楼主 shijies 的回复:
在网上搜了一下有两种方法: 第一种 select top 1 * from (select top N * FROM <span style="font-family: Arial, Helvetica, sans-serif;">TableName </span>order by ID asc)as A order by A.ID desc 第二种 使用 row_number() over() SELECT * from (select *,ROW_NUMBER()over(order by ID)as num FROM TableName)as B where B.num=N 没有搞明白怎么用
SELECT * from (select *,ROW_NUMBER()over(order by ID)as num FROM TableName)as B where B.num=N ROW_NUMBER()over(order by ID)as num这是生成一个查询的列,内容是从1到你查询的总条数,然后你想取那条就让num等于多少就OK了

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧