这里假设有一张员工表,有三个字段 (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为4)就是王五(ID为3)的后一条数据了

步骤二 获取下一条数据(即后一条数据)

接下来就要取赵六这后一条数据了,赵六的ID为4,王五的ID为3,这里有多种方法可以获取到数据。

第一种方法,使用TOP方法和ID排序来过滤数据。先获取当前数据的ID(即王五的ID),然后过滤出比当前ID大的所有数据(得到赵六、刘七和李八的数据),最后在取这些数据中最小ID的数据(通过升序排序取第一条数据),就是赵六(ID为4)的数据。具体数据的前后/上下顺序还是要根据所定义的排序字段来判断!

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

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

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

SELECT TOP(1) * FROM [Employee]
WHERE ID>3
ORDER BY ID ASC

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

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

SELECT * FROM [Employee] WHERE ID=(SELECT MIN(ID) FROM [Employee] WHERE ID>3)

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

SELECT * FROM [Employee]
WHERE ID=
(
SELECT MIN(ID) FROM [Employee]
WHERE ID >(SELECT ID FROM [Employee] WHERE [Name]='王五')
)

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

SQL 获取下一条数据相关推荐

  1. SQL server查询本条数据的下一条数据,上一条数据,及其对应的值,SQL语句示例。

    1.创建测试表 IF EXISTS (SELECT * FROM sys.all_objects WHERE object_id = OBJECT_ID(N'[dbo].[testA]') AND t ...

  2. sql语句查询一条数据的上一条数据和下一条数据

    表t_tablename id_param为当前id 1.查询上一条数据 select * from t_tablename where id=(select max(id) from t_table ...

  3. oracle数据库取前几行,Oracle数据库实现获取前几条数据的方法

    如何在Oracle数据库中实现获取前几条数据的方法呢?就是类似SQL语句中的SELECT TOP N的方法.本文将告诉您答案,举例说明了哟! 1.在Oracle中实现SELECT TOP N : 由于 ...

  4. Mybatis-Plus中getOne方法获取最新一条数据

    Mybatis-Plus中getOne方法获取最新一条数据 一.代码 1.Controller 2.Service 3.效果 一.代码 1.Controller @GetMapping("/ ...

  5. thymeleaf(th:each th:selected) 从后台动态获取下拉框数据回显及选中

    thymeleaf(th:each th:selected) 从后台动态获取下拉框数据回显及选中 <select οnchange="getChilds(this.value)&quo ...

  6. mysql数据库中,查询一个表的下一条数据减上一条数据的值的写法

    mysql数据库中,查询一个表的下一条数据减上一条数据的值的写法: select a.nodeId,a.cpuCharge-b.cpuCharge cpuCharge, a.chargeTime fr ...

  7. sql只返回一条数据 fetch frist 1 rowonly 跟rownum的区别

    对于sql只返回一条数据不同的数据库有着不同的写法 1.DB as400数据库的写法 fetch frist 1 row only 示例 select * from table where name ...

  8. sql server 拿第二条数据

    在一些业务需求中难免会碰到去拿sql 中的第二条数据,鄙人刚刚实现,现提供出来望大家参考: select top 1 * from (SELECT TOP 2 bg_CreateTime FROM t ...

  9. mysql 获取下一条记录数,如何在MySQL中查询当前数据上一条和下一条的记录

    如果ID是主键或者有索引,可以直接查找: 方法一: 查询上一条记录的SQL语句(如果有其他的查询条件记得加上other_conditions以免出现不必要的错误): select * from tab ...

最新文章

  1. php5.2.3 zend3,windows 2008 R2 下 IIS7.5+PHP5.2.17+Mysql5.5.16+Zend3.3.3
  2. 一个基于ngrx的计数器例子
  3. GDB调试工具使用教程(博客)
  4. 【医疗】疫情下的医院信息化短板如何补足?
  5. java基础----数据类型转化
  6. 再次确认输入值、事件绑定实例、输入框内容获取与显示
  7. MOQL--操作数(Operand) (四)
  8. c语言算法单循环球队比赛安排,单循环赛赛程安排算法研究.doc
  9. 阿里云 Aliplayer高级功能介绍(三):多字幕 1
  10. Ubuntu 系列学习(五)ubuntu22.04安装flameshot火焰截图(图文)
  11. Excel2010基础-学习笔记
  12. JAVA之线程和线程池
  13. 征信 - 信用的价值
  14. XORM入门,使用SQLite
  15. 5G时代,App最重要的竞争力应该是什么?
  16. 武汉大学计算机学院专业分流时间,通知|2020级工科试验班(一流学科群)专业分流工作安排...
  17. android推箱子实验报告,[转载]【Android开发】自定义动画-推箱子的开始界面
  18. 电脑蓝屏怎么重装系统
  19. 使用Floyd-Steinberg抖动算法处理价签图片
  20. 北大曹健老师的TensorFlow笔记中,在pycharm中安装sklearn、pandas失败,Could not find conda environment: tensorflow

热门文章

  1. WiFi共享精灵文件传输新功能:金币话费领不停
  2. 雪球产品,场外雪球结构介绍
  3. JVM (二) 垃圾回收机制概念+垃圾回收器种类
  4. matlab对数函数ln5,ln5(ln55怎么算的求过程)
  5. 激光 pm2.5传感器 攀藤科技 stm32 调试通过
  6. 命运多舛。德体:多特蒙德队长罗伊斯因伤无缘卡塔尔世界杯
  7. 读书有益——》民间治咳偏方
  8. 重磅!达摩院发布2021十大科技趋势
  9. 第17章 国际贸易与资本流动
  10. js获取视频长度的3种方法