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. [HDFS Manual] CH3 HDFS Commands Guide

    HDFS Commands Guide HDFS Commands Guide 3.1概述 3.2 用户命令 3.2.1 classpath 3.2.2 dfs 3.2.3 envvars 3.2.4 ...

  2. springboot2.x接口返回中文乱码

    @Configuration public class GlobalConversConfiguration extends WebMvcConfigurationSupport { @Bean pu ...

  3. Excel公式笔记

    跨表,查找相同的数据,的其他列的值 =index(sheet2!$c$:$c$,match(sheet1!$b$,sheet2!$d$:$d$,)) 备注: =index(读哪里的数据(大范围), m ...

  4. 交换上的FLAPPING事件 (zhuan)

    今天在学校的一个三层交换上看到持续的日志信息: Host 00:E0:FC:09:BC:F9is flapping between fa0/x and fa0/y. 思科对此官方的解释是: Error ...

  5. [pig] pig 基础使用

    1.pig运行模式 本地模式: pig -x local 直接访问本地磁盘 集群模式: pig  或者 pig -x mapreduce 2.pig latin 交互 帮助信息 help 上传本地文件 ...

  6. 0710 mux协议的作用(ppp拨号时如何和gprs进行at指令交互)

    ppp拨号使gprs上网的同时如何和gprs模块进行at指令的交互,这是一个问题. 在linux中,ppp拨号上网是内核中支持的,只需要在内核配置中选上. ppp拨号的方式使gprs进行上网与at指令 ...

  7. windows 驱动开发 MDL 内核层 用户层共享内存

    参考资料 https://blog.csdn.net/wdykanq/article/details/7752909 http://blog.51cto.com/laokaddk/404584 内核层 ...

  8. sparksql udf自定义函数中参数过多问题的解决

    在进行spark sql数据库操作中,常常需要一些spark系统本身不支持的函数,如获取某一列值中的字符串. 如要获取 “aaaakkkkk”中的第4-第8个字符. 针对这种需求,只有设置UDF来实现 ...

  9. 使用PsExec获取shell执行命令

    PsExec PsExec是pstools工具组套件的一部分,确成为了渗透利器,下载地址:点击这里下载 连接shell 我的Windows Server 2012默认打开域网络防火墙的时候,是不能连接 ...

  10. 谢大神给的C++和C# DES加解密代码

    // CPPdesTest.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h"//#include <windows.h>//#inc ...