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不连续的值,如何实现查找上一条、下一条的更多相关文章

  1. Linq-查询上一条下一条

    //下一条 int pollid = poll.Where(f => f.PollID < CurrentId).OrderByDescending(o => o.PollID).F ...

  2. php 新闻上一条下一条

    public function prevnext($table,$id,$where=[]){ $ids=db($table)->field('id,title')->order('sor ...

  3. MYSQL实现上一条下一条功能

    select id from(select *, (@i:=@i+1) as rownum from pre_bet_zhibo,(select @i:=0) as itwhere link_cone ...

  4. oracle分析函数技术详解(配上开窗函数over())

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  5. Oracle和SQL SERVER在SQL语句上的差别

    Oracle与Sql server都遵循SQL-92标准:http://owen.sj.ca.us/rkowen/howto/sql92F.html,但是也有一些不同之处,差别如下: Oracle中表 ...

  6. oracle 可以连接数据库,vs连不上. 报错提示:ORA-12154: TNS: 无法解析指定的连接标识符

    方法1:问题:VS 连接 Data Source=ORCL_Service19;User Id=*;Password=* 连接不上 oracle 可以连接数据库,vs连不上,报错提示:ORA-1215 ...

  7. Oracle 史上最全近百条Oracle DBA日常维护SQL脚本指令

    史上最全近百条Oracle DBA日常维护SQL脚本指令 https://mp.weixin.qq.com/s?__biz=MjM5MDAxOTk2MQ==&mid=2650281305&am ...

  8. Oracle根据字段值找到表名和列名

    方法1: --Oracle 根据字段值查询其所在的表.字段 DECLARE CURSOR cur_query IS SELECT table_name, column_name, data_type ...

  9. 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] 谨记 ...

随机推荐

  1. 星云STS 常用配置

    STS4  下载地址:https://spring.io/tools    (这个版本没有tomcat插件) STS3  下载地址:https://spring.io/tools3/sts/all ( ...

  2. 一分钟内搭建全web的API接口神器json-server详解

    JSON-Server 是一个 Node 模块,运行 Express 服务器,你可以指定一个 json 文件作为 api 的数据源. 安装json-server npm install -g json ...

  3. [C++]深入解析结构化异常处理(SEH)

    http://www.cppblog.com/weiym/archive/2015/02/27/209884.html 尽管以前写过一篇SEH相关的文章<关于SEH的简单总结>, 但那真的 ...

  4. Linux 设备树属性在驱动中获取方法

    获取设备树中的属性,可以直接当设备树为配置文件,方便,快捷. 一般probe之后,调用的 probe函数的参数, 是一个设备结构体. 拿 spi 为例子 static int wk2xxx_probe ...

  5. 【gulp】gulp-file-include 合并 html 文件

    gulp-file-include 是 gulp 插件,它提供了一个 include 方法让我们可以像后端模板那样把公共部分的页面导入进来. 安装依赖包(包括了 gulp-file-include 和 ...

  6. 使用JavaScript验证用户输入的是否为正整数

    在项目开发中,需要使用JavaScript验证用户输入的是否为正整数. 方法一: var type="^[0-9]*[1-9][0-9]*$"; var r=new RegExp( ...

  7. awk使用总结

    转载自董的博客 1. 什么是awk awk是Unix/Linux提供的样式扫描与处理工具,非常擅长处理结构化数据和生成表单.与sed 和grep 很相似,但功能却超过大于两者,由于awk具备各种脚本语 ...

  8. 安装 VMWare ESXi 6.7:VMB: 548: Unsupported CPU:6.7版本的ESXi 不支持 某些cpu了

    如题,谨记! 升级是双面刃! 用6.5--版本,即可.

  9. Kafka认证权限配置(动态添加用户)

    之前写过一篇Kafka ACL使用实战,里面演示了如何配置SASL PLAINTEXT + ACL来为Kafka集群提供认证/权限安全保障,但有一个问题经常被问到:这种方案下是否支持动态增加/移除认证 ...

  10. 删除或修改本地Git保存的账号密码

    win10 系统下进入 控制面板 > 用户帐户 > 管理你的凭据 选择 [Windows 凭据] git 保存的用户信息在普通凭据列表里 >>编辑>>>完成