Oracle不连续的值,如何实现查找上一条、下一条
1. 遇到的问题

已知一个题库,希望实现当前页切换上一题,下一题的需求。
查看得知,数据库中用于查询的字段(主键)是不连续的。如上图所示:stxh为主键number类型。
2. 实现方式lead over
2.1 实现代码
下一条
select nowId, afterId from(
SELECT stxh nowId, lead(stxh,1) over (order by stxh) as afterId from EXM_KSTK)
where afterId-nowId>0 and nowId = 54; 上一条
select beforeId, nowId from(
SELECT stxh beforeId, lead(stxh,1) over (order by stxh) as nowId from EXM_KSTK)
where nowId-beforeId>0 and nowId = 54;
2.2 lead方法说明
lead(value_expr [,offset][,default]) over([query_partition_clause] order by Order_by_clause)
value_expr:值表达式,通常是字段,也可是是表达式。
offset:偏移,如果>0 表示与当前行相比,向前的行数。默认值为1
default:默认值,偏移结果不存在时,默认的返回值。
2.3 分析"实现代码"
以上一条为例吧,主要分析lead over 部分:
SELECT 字段名 beforeId, lead(在字段名,偏移量) over (order by 字段名) as nowId from 表名)
整条的使用就是需要传入当前的nowId值
3. 结合需求完善sql
3.1 上一条(主键stxh)
首先需要通过当前id获取上一条记录id值
select beforeId from
(SELECT stxh beforeId, lead(stxh,1) over (order by stxh) as nowId from EXM_KSTK)
where nowId-beforeId>0 and nowId = 54;
通过这条sql就拿到上一条的id值了,然后再select查询即可。
SELECT * FROM EXM_KSTK stxh =
(
select beforeId from
(SELECT stxh beforeId, lead(stxh,1) over (order by stxh) as nowId from EXM_KSTK)
where nowId-beforeId>0 and nowId = 54
)
3.2 下一条(主键stxh)
直接贴代码吧。
SELECT * FROM EXM_KSTK stxh =
(
select afterId from(
SELECT stxh nowId, lead(stxh,1) over (order by stxh) as afterId from EXM_KSTK)
where afterId-nowId>0 and nowId = 54
)
3.3 补充说明
EXM_KSTK:表名
stxh:我的表主键
54:上文所用到的54就是你需要去传入的当前已知的id值
博客地址:https://www.cnblogs.com/niceyoo
Oracle不连续的值,如何实现查找上一条、下一条的更多相关文章
- Linq-查询上一条下一条
//下一条 int pollid = poll.Where(f => f.PollID < CurrentId).OrderByDescending(o => o.PollID).F ...
- php 新闻上一条下一条
public function prevnext($table,$id,$where=[]){ $ids=db($table)->field('id,title')->order('sor ...
- MYSQL实现上一条下一条功能
select id from(select *, (@i:=@i+1) as rownum from pre_bet_zhibo,(select @i:=0) as itwhere link_cone ...
- oracle分析函数技术详解(配上开窗函数over())
一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...
- Oracle和SQL SERVER在SQL语句上的差别
Oracle与Sql server都遵循SQL-92标准:http://owen.sj.ca.us/rkowen/howto/sql92F.html,但是也有一些不同之处,差别如下: Oracle中表 ...
- oracle 可以连接数据库,vs连不上. 报错提示:ORA-12154: TNS: 无法解析指定的连接标识符
方法1:问题:VS 连接 Data Source=ORCL_Service19;User Id=*;Password=* 连接不上 oracle 可以连接数据库,vs连不上,报错提示:ORA-1215 ...
- Oracle 史上最全近百条Oracle DBA日常维护SQL脚本指令
史上最全近百条Oracle DBA日常维护SQL脚本指令 https://mp.weixin.qq.com/s?__biz=MjM5MDAxOTk2MQ==&mid=2650281305&am ...
- Oracle根据字段值找到表名和列名
方法1: --Oracle 根据字段值查询其所在的表.字段 DECLARE CURSOR cur_query IS SELECT table_name, column_name, data_type ...
- Oracle 11g 的bug?: aix 上,expdp 11.2.0.1 导出,impdp 11.2.0.3 导入,Interval 分区的 【Interval】 分区属性成了【N】
如题: Oracle 11g 的bug?: aix 上,expdp 11.2.0.1 导出,impdp 11.2.0.3 导入,Interval 分区的 [Interval] 分区属性成了[N] 谨记 ...
随机推荐
- appium 报错
2018-11-27 18:05:56:313 - [Logcat] Logcat terminated with code 0, signal null 2018-11-27 18:05:56:31 ...
- lua中table的遍历,以及删除
Lua 内table遍历 在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是: 1. ipairs for index, value in ipair ...
- 【C#】读取Excel中嵌套的Json对象,Json带斜杠的问题(其二)
上一篇说到的嵌套Json带有斜杠的问题,如下图: 上一篇中用反射C#类的方法,在序列化Json阶段实现了去掉斜杠,现在还有一种相对更简单的方法,就是在反序列化阶段,读取Json时通过字符串的操作,把这 ...
- JVM核心知识体系(转http://www.cnblogs.com/wxdlut/p/10670871.html)
1.问题 1.如何理解类文件结构布局? 2.如何应用类加载器的工作原理进行将应用辗转腾挪? 3.热部署与热替换有何区别,如何隔离类冲突? 4.JVM如何管理内存,有何内存淘汰机制? 5.JVM执行引擎 ...
- <jsp:param>标签给属性赋值时的一个坑
http://blog.sina.cn/dpool/blog/s/blog_58c5066001011gdn.html 因为: <jsp:forward和<jsp:param在被编译成ja ...
- opencv利用直方图判断人脸光照质量
懒得用中文再写一遍了, 直接传送门过去吧. https://medium.com/@fanzongshaoxing/detect-face-in-bad-lighting-condition-usin ...
- 自己手写一个queuelink
代码如下: <?php class QueueLink { private $first_key=0;//最前面的那个元素的键 private $first_value=0;//最前面的那个元素 ...
- Oracle创建表空间以及用户语句
记录一下常用的语句,便于以后使用… create tablespace TABLESPACENAMEdatafile 'E:\Data\ORACLEDATA\XXX.dbf' size 200M au ...
- js this指向理解
1.如果调用this的函数上级有多个对象,this只会指向上一级对象 下面实例fn函数调用this时,this指向b对象,如果b里面有a属性就输出值: 如果没有就是undefined 在来看下下面的实 ...
- YApi 部署记录
YApi 是一个可本地部署的.打通前后端及QA的.可视化的接口管理平台. Step1:准备Mongo数据库 services: mongo: image: mongo restart: always ...
