orcale 使用创建日期排序然后分页每次取排序后的固定条数
需求:
一个使用mybatis分页插件的分页列表, 现在要求新增一条数据或者修改一条数据后,显示在最前端
思路:
使用sql , 先将查询出来的数据排序, 然后使用rownum > page*size 和rownum <= (page+1)*size 条件取固定条数的数据
问题 :
执行sql时遇到一个问题, 因为使用order by tn.create_time desc 进行降序排列,是在where条件查询后, 所以rownum序号已经生成, 在排序rownum的值不会变, 改变的是数据顺序 ,
当使用rownum > page*size 和rownum <= (page+1)*size取值时其实取的就是没排序前的固定条数, 也就是说, order by虽然排序了, 可以取值没有取排完序后的数据
解决方法:
方法一:
SELECT *
FROM (
SELECT tn.ID,
ROW_NUMBER() OVER(PARTITION BY tn.valid ORDER BY NVL(tn.modify_time,tn.create_time) desc) RN
FROM table_name tn
JOIN table_name2 tn2 ON tn.ID = tn2.ID
WHERE tn.condition = '条件'
)
WHERE RN >(page*size) AND RN <= (page + 1)*size;
因为观察数据特点,发现存在一个标志可用\不可用状态的字段, 所以使用 ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,
根据可用状态分组,所有可用的就会进行编号,然后根据创建时间或者修改时间进行组内排序 ,又因为新增的数据没有修改时间,而新增后创建时间不变,只有修改时间改变,所以使用 NVL(tn.modify_time,tn.create_time) 判断,
如果修改时间为空(新增操作)就使用创建时间排序, 如果修改时间不为空(修改操作)那么就使用创建时间排序, 然后使用 WHERE RN >(page*size) AND RN <= (page + 1)*size 传入page(第几页)和size(每页长度)获取数据
方法二 :
select * from
(
select row_.*, rownum rownum_ from
(
select od.*,rownum from
(
select *
from table_name tn
join table_name2 tn2 ON tn.ID = tn2.ID
WHERE tn.condition = '条件' order by NVL(tn.modify_time,tn.create_time) DESC
) od
) row_ where rownum <= (page + 1)*size
)where rownum_ > (page*size);
这是另一个思路, 首先将所有符合条件的数据根据创建时间进行排序,形成一张按创建时间排序的临时表,然后在给这张表添加上rownum序号,并取出 rownum <= (page + 1)*size 条数据,
形成排序后的前 (page + 1)*size 条临时表,最后取出需要的(page*size)到(page + 1)*size条数据
orcale 使用创建日期排序然后分页每次取排序后的固定条数的更多相关文章
- 在Java中,为什么十六进制数0xFF取反之后对应的十进制数是-256呢?
int number = 0xFF: 字面值是指在程序中无需变量保存,可直接表示为一个具体的数字或字符串的值. 0xFF是一个整数字面值,整数字面值的缺省类型是 int. 我们知道在Java中, in ...
- 数据多js平均时间取固定条数展示,echarts数据多处理数据
js代码: function getfailurerate(start,end,ip) { $.ajax( { url : "report/getvirtual.action", ...
- for循环每次展示固定条数的数据的写法。
第一种是一组json数据实现分页的效果,也就是每一次展示5条数据.第二种场景是每一秒展示4条数据,直到全部显示完.两种思路都做个笔记记录下. var nums = 5; //每页出现的数量 var p ...
- MS SQL 取分组后的几条数据
SELECT uploaddate ,ptnumber ,instcount FROM ( SELECT ROW_NUMBER() OVER( PARTITION BY uploaddate ORDE ...
- 前端paging分页,前端设置每页多少条和当前页面的索引,传给后端,数据显示出来
1.首先引入jquery 2.在引入paging.css和paging.js 这2个我存在百度云上: 链接:https://pan.baidu.com/s/1SPxlBkkx-pNAtLuRLifE ...
- 1、SQL可搜索可排序可分页存储过程, 2、范围内的随机时间 适用于sql 2008以上
-- ============================================= -- Author: 蜘蛛王 -- Create date: 2015-10-29 -- Descri ...
- 一行代码调用实现带字段选取+条件判断+排序+分页功能的增强ORM框架
问题:3行代码 PDF.NET是一个开源的数据开发框架,它的特点是简单.轻量.快速,易上手,而且是一个注释完善的国产开发框架,受到不少朋友的欢迎,也在我们公司的项目中多次使用.但是,PDF.NET比起 ...
- 在ASP.NET MVC中使用Boostrap实现产品的展示、查询、排序、分页
在产品展示中,通常涉及产品的展示方式.查询.排序.分页,本篇就在ASP.NET MVC下,使用Boostrap来实现. 源码放在了GitHub: https://github.com/darrenji ...
- oracle入门(8)——实战:支持可变长参数、多种条件、多个参数排序、分页的存储过程查询组件
[本文介绍] 学了好几天,由于项目需要,忙活了两天,写出了个小组件,不过现在还只能支持单表操作.也没考虑算法上的优化,查询速度要比hibernate只快了一点点,可能是不涉及多表查询的缘故吧,多表的情 ...
随机推荐
- 树莓派安装vnc server并设置自启动
在SSH终端输入sudo raspi-config, 这里需要打开几个选项: expand_rootfs – 将根分区扩展到整张SD卡; change_pass – 默认的用户名是pi,密码是rasp ...
- jqgrid表头上面再加一行---二级表头
实现效果如图,代码如下: $( "#table_list_1" ).jqGrid( 'setGroupHeaders' , { useColSpanStyle : true , / ...
- 用Redis作Mysql数据库缓存
使用redis作mysql数据库缓存时,需要考虑两个问题: 1.确定用何种数据结构存储来自Mysql的数据; 2.在确定数据结构之后,用什么标识作为该数据结构的键. 直观上看,Mysql中的数据都是按 ...
- Django 学习笔记(二) --- HTML 模版
人生苦短 ~ Tips:仅适用于 Python 3+(反正差别不大,py2 改改也能用).因为据 Python 之父 Guido van Rossum 说会在 2020 年停止对 Python 2 的 ...
- springboot aop 自定义注解方式实现完善日志记录(完整源码)
版权声明:本文为博主原创文章,欢迎转载,转载请注明作者.原文超链接 一:功能简介 本文主要记录如何使用aop切面的方式来实现日志记录功能. 主要记录的信息有: 操作人,方法名,参数,运行时间,操作类型 ...
- Spark新手入门——2.Hadoop集群(伪分布模式)安装
主要包括以下三部分,本文为第二部分: 一. Scala环境准备 查看 二. Hadoop集群(伪分布模式)安装 三. Spark集群(standalone模式)安装 查看 Hadoop集群(伪分布模式 ...
- 浅谈c#的三个高级参数ref out 和Params
c#的三个高级参数ref out 和Params 前言:在我们学习c#基础的时候,我们会学习到c#的三个高级的参数,分别是out .ref 和Params,在这里我们来分别的讲解一下,在这里的我们先不 ...
- PowerDesigner 修改Name ,Code 不变
tools-> General Options-> Dialog:Operation Modes: 去掉 NameToCodeMirroring 前面的√
- [PHP] 算法-找出两个链表的第一个公共结点的PHP实现
输入两个链表,找出它们的第一个公共结点 1.两个单链表,有公共结点,那么必然,尾部公用 2.找出链表1的长度,找出链表2的长度,长的链表减去短的链表得出一个n值 3.长的链表先走n步,两个链表再同时移 ...
- 设计模式之享元模式(Flyweight)
享元模式顾名思义就是羽量级模式或者蝇级模式,形容体量小的应用,该模式主要的设计目的是为了迎合系统大量相似数据的应用而生,减少用于创建和操作相似的细碎对象所花费的成本.大量的对象会消耗高内存,享元模式给 ...