当前位置: 首页 > news >正文

Oracle通过SQL找出ID不连续的位置

文章目录

  • 1 前言
  • 2 SQL
  • 3 结语

1 前言

  工作中要求我找到 ID 不连续的地方, 然后拿这个 ID , 给数据库里面 INSERT 一条数据. 比如:

ID备注
… 省略连续的部分
23
24
25就是想找到这里断开的地方, 下一个可以 INSERT 的 ID 就是 26
74915
75115
75120
75122
… 省略连续的部分

2 SQL

  假设数据库表名叫 MY_TEST_TABLE, 先执行一段 SQL, 看看它 ID 不连续的位置:

SELECT t1.id FROM MY_TEST_TABLE t1 ORDER BY t1.id ASC
;
-- 结果
ID   |
-----+
... 省略连续的部分22|23|24|25|
74915|
75115|
75120|
... 省略连续的部分

  很明显, 由上面的执行结果可知, ID 在 25 和 74915 的位置 不连续了, 那么下一个可 INSERT 的 ID 就是 26. 接下来, 我们就执行 SQL 来找到这个 26 :

-- 查找 项目成员 的 不连续的 ID 的 SQL
SELECT
/* 下一个ID */
t3.before_id + 1 next_id
FROM (SELECT /* before_id 表示当前 ID 的上一个 真实的ID. 比如 25 */FIRST_VALUE(t2.ID) OVER (ORDER BY t2.id rows between 1 preceding and 1 following) before_id,/* before_id 表示当前 真实的ID. 比如 74915 */t2.id current_id,/* after_id 表示当前 ID 的下一个 真实的ID. 比如 75115 */LAST_VALUE(t2.id) OVER (ORDER BY t2.id rows between 1 preceding and 1 following) after_id FROM (SELECT t1.id FROM MY_TEST_TABLE t1 ORDER BY t1.id asc) t2
) t3
WHERE 
/* 上一个可能的ID(25) 加1 不等于当前的ID (75115) */
t3.before_id + 1 <> t3.current_id AND t3.current_id - 1 > 1
/* 只取第一个 */
AND rownum = 1
;
-- 结果
NEXT_ID|
-------+26|

3 结语

  需要注意的是, 上面的SQL 只适合 Oracle, 它不适合 MySQL, 因为 FIRST_VALUE() 和 LAST_VALUE() 函数 可能在 MySQL 上面没有.

http://www.lryc.cn/news/23227.html

相关文章:

  • 学习一个Java项目
  • 《数据库系统概论》学习笔记——第三章 关系数据库标准语言SQL
  • linux shell 入门学习笔记17 mysql脚本开发
  • 产品新说 | 指标的异常检测怎么做,能更好配合业务变化(二)
  • 华为OD机试题,用 Java 解【最短耗时】问题
  • mysql数据库常见面试题
  • 【Android源码面试宝典】MMKV从使用到原理分析(一)
  • 你真的懂动态库吗?一文详解动态库的方方面
  • I.MX6ULL内核开发12:使用设备树插件实现RGB灯驱动
  • 大家一起来找茬,新手第一次layout到底能挑出多少毛病?
  • Java集合概述(Collection集合)
  • 运动无线蓝牙耳机哪款好、运动无线蓝牙耳机推荐
  • 解决AAC音频编码时间戳的计算问题
  • Android 9.0 添加自定义开机广播
  • 第四阶段10-添加类别,类别列表mapper层,service层,controller层
  • linux内核启动分析(一)
  • wireshark常见使用操作讲解以及几个故障解决案例分享
  • 利用逻辑分析仪解析串口通讯数据
  • 新整理的前端面试题
  • 数据仓库-数仓分层
  • 【Linux】Linux根文件系统扩容
  • RPC编程:Hessian RPC一个老的RPC框架(一)
  • 逆向 x蜂窝 zzzghostsigh
  • QML 鼠标事件
  • 极智项目 | 实战pytorch arcface人脸识别
  • 【IP技术】ipv4和ipv6是什么?
  • linux基本功系列之uniq命令实战
  • 六、SpringBoot项目搭建
  • 【LeetCode】2363. 合并相似的物品
  • 华为OD机试题,用 Java 解【出租车计费】问题