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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(2719):重读vue电商网站39之正则表达式验证邮箱和手机号码

Javascript // 验证邮箱的规则var checkEmail (rule, value, cb) > {const regEmail /^([a-zA-Z]|[0-9])(\w|-)[a-zA-Z0-9]\.([a-zA-Z]{2,4})$/if (regEmail.test(value)) {// 合法的邮箱return cb()}cb(new Error(请输入合法的邮箱))}// 验证手机号码的规则var checkMobi…

支付宝提现,单笔转账到支付宝账户

很简单。只需三个参数实现 单笔转账到支付宝账户 1、获取开放平台创建的APPID,同时必须添加 单笔转账到支付宝账户 这个功能 开放平台:https://open.alipay.com/platform/home.htm 2、登录支付宝商家中心平台:https://b.alipay.com/index.h…

前端学习(2730):重读vue电商网站40之使用vue-table-with-tree-grid

安装新的依赖 vue-tabel-with-tree-gridvue-tabel-with-tree-grid 官方文档 安装完成后,在 main.js 入口文件内先导入 tree-tabel 然后全局注册组件 tree-tabel 页面中,我们使用了如下属性: data 确定我们的数据源,columns定义我…

前端学习(2731):重读vue电商网站41之自定义格式化时间的全局过滤器

在 main.js 入口文件全局注册格式化时间的过滤器,代码如下所示: Javascript // 自定义格式化时间的全局过滤器 Vue.filter(dataFormat, function(originVal) {const dt new Date(originVal)const year dt.getFullYear()const mon (dt.getMonth() 1 …

sign check fail: check Sign and Data Fail

支付宝开发报错:com.alipay.api.AlipayApiException: sign check fail: check Sign and Data Fail 解决方法: 确认使用的支付宝公钥是否正确,不同的环境使用的支付宝公钥不同, 如沙箱环境、线上openapi网关和mapi网关对应的支付…

前端学习(2732):重读vue电商网站42之添加富文本编辑器

vue-quill-editor 官方文档传送门 通过 vue-ui 界面,可以安装我们所需要的依赖,或者使用下文 npm 或 yarn安装。 NPM Js npm install vue-quill-editor --save# or yarn add vue-quill-editorMount with global Js import Vue from vue import VueQui…

1、Flutter_初体验_创建第一个应用_AndroidStudio_windows

1.前言 至于 Flutter 是啥,我就不在这啰嗦了,下面以 windows 为例,展示一下从安装 Flutter 到运行 APP 整个过程; 2.安装 Flutter 2.1、中文介绍文档:https://flutterchina.club/get-started/install/ (我的…

jquery.min.js一引入到工程中显示红叉,或其他.js文件显示红叉

1.可能的原因: Eclipse或者MyEclipse校验失败的错误,不影响程序正常执行 2.解决方案: 选择项目,右键 Myeclipse--> ManaValidation--> ExcludeResource 将出现问题的js前的复选框选中。点击“应用” “确定”。如果以上…

【JEECG技术文档】Online唯一校验使用说明

1、功能介绍 配置了唯一校验的字段,在录入和编辑页面中,动态查询用户输入值是否存在校验。 要使用online唯一校验功能必须先在online表单开发中配置唯一字段的校验方式为唯一校验。 2、配置唯一校验 登录系统,在线开发-online表单开发&#x…

eclipse 安装 lombok插件

下载插件 官网下载 :https://projectlombok.org/ 有些小伙伴官网可能打不开,现提供我的下载地址:https://files.cnblogs.com/files/niceyoo/lombok.zip 安装 lombok 插件 1、右键打开 2、选择 eclipse.exe > install 博客地址:…

Android.View.InflateException: Binary XML File Line #异常的解决

这个运行错误,主要出现在安卓系统5.0一下手机系统。在5.0以上手机系统,不会出现这个错误 错误如下:在引入自定义VIEW时报错 原因:资源文件shape_new_message.xml在drawable-v24文件夹下,而不在drawable文件夹下 解决…

Android添加Header请求参数实例,java响应header请求实现demo

1、首先添加AsyncHttpClient.jar包到libs文件夹下 2、初始化请求类以及响应回调类 private AsyncHttpClient client; private AsyncHttpResponseHandler asyncHttpResponseHandler; 3、网络权限 <!-- 网络链接 --> <uses-permission android:name"android.perm…

苹果 ios 微信浏览器界面 ajax 提交带 file 的 form 总是走error方法

1. 问题 问题出在微信端&#xff0c;而且是苹果机的微信端(苹果你咋这么矫情&#xff0c;安卓正常).&#xff1b;代码还是之前的代码&#xff0c;貌似是苹果升级系统后部分版本出现的 BUG&#xff0c;后来证明确实跟 ios 版本有关&#xff0c;网上也找过类似的解决措施&#xf…

前端学习(2748):uniapp创建项目和演示

1创建项目 2运行项目 3配置在微信小程序注意 配置路径 4注意开启端口号

HttpServletResponse.getWriter().print乱码,request.getHeader乱码,解决方法

1、添加响应类型即可 //这句话的意思&#xff0c;是让浏览器用utf8来解析返回的数据 response.setHeader("Content-type", "text/html;charsetUTF-8"); 添加前后&#xff1a; 如果是header参数乱码&#xff0c;解决方法如下&#xff1a; HTTP H…

设计图与html 对比

简易打开旧版火狐 网页版火狐添加组件 新版有时也会没有 谷歌是腾讯的转载于:https://www.cnblogs.com/byksj/p/8426291.html