/*十有三博客*/
  • 首页
  • 关于本站
  • 网站地图
  • RSS订阅

SQL使用ROW_NUMBER函数获取没有ID的当前数据的上下文数据(上一条和下一条)

2014-09-06 十有三 0 浏览:1万+ 数据库 SQL

SQL SERVER中常常需要使用到SQL语句获取某条数据的上下文数据,即当前数据的上一条和下一条数据。一般都是根据数据的ID来过滤和排序。本文介绍的是在表结构没有ID的情况下,如何使用ROW_NUMBER SQL函数来获取上一条和下一条数据。

这里我们先创建一张城市表,只有一个城市名称字段(CityName):

CREATE TABLE [dbo].[City](
	[CityName] [nvarchar](100) NULL
) ON [PRIMARY]

然后任意的添加8条城市的名称数据:

insert into city (cityname) values('吉林市');
insert into city (cityname) values('海口市');
insert into city (cityname) values('太原市');
insert into city (cityname) values('郑州市');
insert into city (cityname) values('长沙市');
insert into city (cityname) values('贵阳市');
insert into city (cityname) values('成都市');
insert into city (cityname) values('昆明市');

这里假设我们要取昆明市的上下文数据,即吉林市和太原市:

SQL使用ROW_NUMBERSQL获取没有ID的当前数据的上下文数据(上一条和下一条)

这里有两种实现的方法,第一种方法是使用ROW_NUMBER函数将表数据加入序列号,然后将数据保存至临时表中,在通过查询临时表的序列号来获取上下文数据。第二种方法也是使用ROW_NUMBER函数,不过这里不用临时表,而是使用WITH表达式将数据放入指定临时命名的结果集,其实这两种方法都是大同小异的。

PS:ROW_NUMBER只能在SQL SERVER 2005以上的数据库才有支持!

方法一,使用临时表+ROW_NUMBER函数获取上下文数据

--将有序列号的数据插入到临时表中
SELECT ROW_NUMBER() OVER(ORDER BY CityName ASC) AS ROWID,* INTO #TB FROM [City];

--方法一,获取吉林市的数据(即上一条)
SELECT * FROM #TB
WHERE ROWID=(SELECT TOP(1) ROWID-1 FROM #TB WHERE CityName='昆明市');
--方法一,获取太原市的数据(即下一条)
SELECT * FROM #TB 
WHERE ROWID=(SELECT TOP(1) ROWID+1 FROM #TB WHERE CityName='昆明市');

阿三地方asdf

方法二,使用WITH表达式+ROW_NUMBER函数获取上一条和下一条数据

--方法二,获取吉林市的数据(即上一条)
WITH TB_Previous AS
(
SELECT ROW_NUMBER() OVER(ORDER BY CityName ASC) AS ROWID,* FROM [City]
)
SELECT * FROM TB_Previous
WHERE ROWID=(SELECT TOP(1) ROWID-1 FROM TB_Previous WHERE CityName='昆明市');

--方法二,获取太原市的数据(即下一条)
WITH TB_Next AS
(
SELECT ROW_NUMBER() OVER(ORDER BY CityName ASC) AS ROWID,* FROM [City]
)
SELECT * FROM TB_Next 
WHERE ROWID=(SELECT TOP(1) ROWID+1 FROM TB_Next WHERE CityName='昆明市');

 


作者:十有三

出处:https://shiyousan.com/post/635456222636080287

版权声明:本文采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。欢迎转载本文,转载请声明出处或保留此段声明。


  • 上一篇: SQL 获取下一条数据
  • 下一篇: Javascript方法的覆盖和重写

相关文章
  • System.Data.SqlClient.SqlError: 尚未备份数据库的日志尾部
  • 解决SQL Service创建链接服务器出现(null) 是无效的产品名称的问题
  • 使用sqlcmd命令执行带参数的存储过程
  • 创建 SQL Server Express自动备份数据库功能
  • 在windows server 2012中实现SQL SERVER EXPRESS自动备份数据库
  • MongoDB学习笔记:28663 Cannot start server. The default storage engine 'wiredTiger' is not available

文章分类

.NET技术 123 数据库 24 Web前端 21 网站建设运维 37 操作系统与应用 66 程序猿日常 11 开发工具 12 其他随笔 13

文章标签

ASP.NET ASP.NET MVC C# CSS HTML IIS Javascript Linux MongoDB MySql SQL SQL Server Visual Studio Windows系统 版本控制系统 插件工具 服务器 搞笑娱乐 好文分享 软件应用 生活知识 手机问题 随笔 网络知识 网站设计优化 网站维护 养生保健 异常处理 硬件设备 游戏攻略

热门文章

  • IIS8如何安装和使用URL重写工具-URL Rewrite
  • 林蛋大与楚中天,朱肚皮与朱月坡
  • 解决IE11安装升级失败和在安装前需要更新的问题
  • Windows Server 2012无法安装 .NET3.5-安装角色或功能失败,找不到源文件
  • VS重构重命名的快捷键

推荐文章

  • Discuz!NT Flash无法上传头像,点击上传后无任何反应
  • ASP.NET MVC网站发布后出现“/”应用程序中的服务器错误。
  • HTML使用相对路径获取各级目录下文件
  • 黑白龙狼传中雪山银燕初登场音乐BGM
  • 火狐浏览器在URL中不兼容反斜杠"\"作为路径分隔

友情链接

  • Passingwind的博客
  • 码友网

知识共享许可协议 CC BY-SA 4.0本站作品采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。
闽ICP备15003702号
闽公网安备 35020302035102号