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

SQL 获取上一条数据

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

本文介绍SQL语句如何查询获取到当前数据的上一条数据,这里需要使用一些小技巧来实现这个功能。本文会介绍多种情况多种方法来实现。

相关文章:

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

这里假设有一张员工表,有三个字段 (ID,员工姓名,年龄):

CREATE TABLE [dbo].[Employee]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL,
[Age] [int] NOT NULL
) ON [PRIMARY]

这里插入六条数据:

INSERT INTO [Employee]([Name],Age) VALUES('张三',30);
INSERT INTO [Employee]([Name],Age) VALUES('李四',39);
INSERT INTO [Employee]([Name],Age) VALUES('王五',33);
INSERT INTO [Employee]([Name],Age) VALUES('赵六',23);
INSERT INTO [Employee]([Name],Age) VALUES('刘七',28);
INSERT INTO [Employee]([Name],Age) VALUES('李八',25);

以下方法都是需要使用到自动增长ID,即ID作为主键,使用ID排序来筛选数据。

步骤一 确定上一条数据

现在假设我们要取王五的前一条数据要怎么取呢?第一步要先确定当前数据的前一条数据,一般来说,员工王五的前一条信息应该是李四的,这是因为在SQL中默认可能会根据当前表的主键(一般是ID字段)来进行升序排序,所以李四就是王五的前一条信息。具体数据的前后/上下顺序还是要根据所定义的排序字段来判断!

所以我们要根据字段的排序先确定数据的前后关系,这里我们使用默认的升序排序:

SELECT * FROM [Employee] ORDER BY ID ASC

可以看到李四(ID为2)就是王五(ID为3)的前一条数据了

SQL 获取上一条数据

步骤二 获取上一条数据(即前一条数据)

接下来就要取李四这前一条数据了,李四的ID为2,王五的ID为3,这里有多种方法可以获取到数据。

第一种方法,使用TOP方法和ID排序来过滤数据。先获取当前数据的ID(即王五的ID),然后过滤出比当前ID小的所有数据(得到张三和李四的数据),最后在取这些数据中最大ID的数据(通过降序排序取第一条),就是李四(ID为2)的数据。

情况1、根据员工的名字来查询获取当前数据ID:

SELECT TOP(1) * FROM [Employee]
WHERE ID<(SELECT ID FROM [Employee] WHERE [Name]='王五')
ORDER BY ID DESC

情况2、已经知道当前数据的ID,这里王五ID为3:

SELECT TOP(1) * FROM [Employee]
WHERE ID<3
ORDER BY ID DESC

第二种方法,不使用TOP+ID排序,直接获取上一条数据的ID来获取数据。首先使用MAX函数查询出上一条数据的ID,在通过最大ID获取上一条数据的详细信息。

情况1、已知当前数据ID:

SELECT * FROM [Employee]
WHERE ID=(SELECT MAX(ID) FROM [Employee] WHERE ID <3)

情况2、需要查询出当前ID:

SELECT * FROM [Employee]
WHERE ID=
(
SELECT MAX(ID) FROM [Employee]
WHERE ID <(SELECT ID FROM [Employee] WHERE [Name]='王五')
)

 


作者:十有三

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

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


  • 上一篇: JSON劫持漏洞分析和攻防演练
  • 下一篇: SQL 获取下一条数据

相关文章
  • SQL使用ROW_NUMBER函数获取没有ID的当前数据的上下文数据(上一条和下一条)
  • MongoDB在Windows Server 2012 R2中的安全部署
  • System.Data.SqlClient.SqlError: 尚未备份数据库的日志尾部
  • MongoDB学习笔记:解决编写.mongorc.js脚本无效的问题
  • 解决COMMIT TRANSACTION 请求没有对应的 BEGIN TRANSACTION错误
  • 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-安装角色或功能失败,找不到源文件
  • Win10中如何设置Hyper-V的网络让虚拟机也能上外网

推荐文章

  • C# String.Substring(Int32, Int32)超出长度是否会出错
  • 解决Visual Studio Community 2013中文语言包安装失败导致无法使用的问题
  • 创建 SQL Server Express自动备份数据库功能
  • 研究下CSS3的background-size属性
  • 解决OneNote 2016提示备份成功但是文件夹为空白的问题

友情链接

  • 码友网

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