/*十有三博客*/
  • 首页
  • 关于本站
  • 网站地图
  • 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 获取下一条数据

相关文章
  • MongoDB学习笔记:28663 Cannot start server. The default storage engine 'wiredTiger' is not available
  • SQL 获取上一条数据
  • SQL使用ROW_NUMBER函数获取没有ID的当前数据的上下文数据(上一条和下一条)
  • System.Data.SqlClient.SqlError: 尚未备份数据库的日志尾部
  • SQL Server Express不支持维护计划功能
  • 在windows server 2012中实现SQL SERVER EXPRESS自动备份数据库

文章分类

.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重构重命名的快捷键

推荐文章

  • CKEditor 4.4.1 添加代码高亮显示插件功能--使用官方推荐Code Snippet插件
  • 解决"在页面head部分没有发现字符集定义,请增加该说明"的问题
  • .NET 4.5 使用async和await关键字调用异步方法
  • 解决IE11安装升级失败和在安装前需要更新的问题
  • 解决IIS ASP.NET 网站发布后出现错误 Unable to connect to any of the specified MySQL hosts

友情链接

  • Passingwind的博客
  • 码友网

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