oracle序列不连续,Oracle不连续的值,如何实现查找上一条、下一条

1.  遇到的问题

c79deaad2e378e106697cfb1ae172169.png

已知一个题库,希望实现当前页切换上一题,下一题的需求。

查看得知,数据库中用于查询的字段(主键)是不连续的。如上图所示:stxh为主键number类型。

2.  实现方式lead over

2.1  实现代码

2685f279f1b814c849dbead54763b0cf.png   

1a9c2b934bce880676822fb42146108b.png

下一条

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

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 ...

oracle分析函数技术详解(配上开窗函数over&lpar;&rpar;)

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

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

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

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

方法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 ...

自己制作一个链表用来存储列表信息,并查找当前id信息,找上一条信息,下一条信息&lpar;信息浏览的时候方便使用&rpar;

偶然看到某些网站在新闻详情中 ,往往是需要根据当前信息id获取到上一条信息和下一条信息的,而通常我们的做法是先获取当前信息,再获取上一条信息,再获取下一条信息,就需要发送三次查询才能够得到这些信息,一 ...

随机推荐

android 教程实例系列

用户界面部分学起来还真是无处下手哇,总不能一个控件发一篇文吧,略有点费时间啊...这个难道不是边用边学才给力吗..所以我打算从最实用的Button开始下手. 先贴几个链接,好东西: android用户 ...

EF-CodeFirst-3搞事

本文学习旺杰兄的 CodeFirst 系列教程而写.尽量摆脱之前的影子写出自己的理解 表间关系.级联删除 简单玩法已经走通了,但是我就是想搞点事出来.今天来搞搞表间关系和级联删除 表间关系 毫无疑问在 ...

1156&period; Two Rounds(dfs&plus;背包)

1156 求出每个联通块的黑白块数 然后再背包 二维的背包 要保证每个块都得取一个 写的有些乱.. #include #include # ...

浅谈IT员工管理

本人尽管还不是管理人员,但也管理过学弟们(不是同校.仅仅是工作中同事,为了好称呼叫学弟).也被管理着,工作也好多年了.今天又感而发.想来谈谈假设管理好员工(在此声明,我仅仅是发表个人意见哦.不要喷.哈 ...

去掉UITableView HeaderView或FooterView随tableView 移动的黏性

去掉UITableView HeaderView或FooterView随tableView 移动的黏性(sticky) 控制器中实现以下方法即可: - (void)scrollViewDidScrol ...

Web Animations API &lpar;JS动画利器&rpar;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值