oracle rownum order by 爬坑
系统中同时使用mysql和oracle数据库,需要保证两边的兼容性。今天测试的同学发现一个oracle版本的bug,经过排查发现是rownum和order by引起的。
原sql如下:
select ACT_NAME_ "actName",TO_CHAR(END_TIME_, 'yyyy-mm-dd hh24:mi:ss') "endTime"from act_hi_actinstwhere ACT_TYPE_ = 'userTask'and PROC_INST_ID_ in(select t.PROC_INST_ID_from (select *from act_hi_procinstwhere BUSINESS_KEY_ = concat('mkt_cam_audit', #{campaignId})and ROWNUM = 1order by START_TIME_ desc) t)order by (case when "endTime" is null then 1 when "endTime" is not null then 0 end), "endTime"
主要问题在子查询里边,子查询大致逻辑是根据时间排序后(将END_TIME_为空的行排在最前面),取出第一行数据,然而在使用条件:
where BUSINESS_KEY_ = concat('mkt_cam_audit', #{campaignId})and ROWNUM = 1
始终得到的不是首行数据。
最后发现问题在于:
oracle中rownum和order by同时使用时,需要将order by放在里层,而rownum=1放在外层,也就是先排序号,再取第一条数据,这和mysql是不一样的,mysql则没有这么麻烦。
修改后sql如下:
select ACT_NAME_ "actName",TO_CHAR(END_TIME_, 'yyyy-mm-dd hh24:mi:ss') "endTime"from act_hi_actinstwhere ACT_TYPE_ = 'userTask'and PROC_INST_ID_ in(select *from (select t.PROC_INST_ID_ from (select *from act_hi_procinstwhere BUSINESS_KEY_ = concat('mkt_cam_audit', #{campaignId})order by START_TIME_ desc) t) where ROWNUM = 1)order by (case when "endTime" is null then 1 when "endTime" is not null then 0 end), "endTime"
All efforts, only for myself, no longer for others
oracle rownum order by 爬坑相关推荐
- centos7安装mysql日志空白_centos7安装Mysql爬坑记录 - G
centos7安装Mysql爬坑记录 查看是否已安装 使用下列命令查看是否已经安装过mysql/mariadb/PostgreSQL 如果未安装,不返回任何结果(ECS的centos镜像默认未安装任何 ...
- mybatis-generator 详细配置及使用,爬坑记录
mybatis-generator 详细配置及使用,爬坑记录 提示:如果不成功一定是项目路径和 数据库配置出问题,本篇基于 MySQL 8.0.13,调试没有问题. 如果失败,建议使用相同的项目结构, ...
- Django实现一个简单的中间件,不熟悉中间件的爬坑之路
1.在之前,写过一篇文章,自定义一个简单的中间件,文章链接如下:https://blog.csdn.net/u012561176/article/details/84024073 后面,发现还是有问题 ...
- oracle+rownum(),Oracle rownum和row_number()
rownum 和 row_number()的区别 一. Oracle中的rownum 用于从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依次类推.这个伪字段可以用于限制查询返回的总行数,而 ...
- oracle rownum最后的数据,oracle rownum问题
本帖最后由 dingjun123 于 2011-11-16 20:06 编辑 你根本不了解oracle rownum的用法,详细参考sql reference 发个很久以前写的东西 8.rownum- ...
- oracle的rownum的用法,Oracle Rownum用法
Oracle Rownum用法 Oracle提供了rownum,rownum是一个隐含的(查询结果集)字段,rownum是一个行号,从1开始. rownum隐含字段 select rownum, a. ...
- Vue 爬坑之路(六)—— 使用 Vuex + axios 发送请求
Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-resource 目前主流的 Vue 项目,都选择 axios ...
- Android爬坑之旅:软键盘挡住输入框问题的终极解决方式
本文由BarryZhang原创,同一时候首发于diycode.cc.barryzhang.com .github.com/barryhappy.非商业转载请注明作者和原文链接. 前言 开发做得久了.总 ...
- 【爬坑】在 IDEA 中运行 Hadoop 程序 报 winutils.exe 不存在错误解决方案
[爬坑]在 IDEA 中运行 Hadoop 程序 报 winutils.exe 不存在错误解决方案 参考文章: (1)[爬坑]在 IDEA 中运行 Hadoop 程序 报 winutils.exe 不 ...
最新文章
- idea运行jsp显示源码_基于jsp+mysql+Spring+mybatis的SSM在线个人PC电脑商城平台网站系统...
- BZOJ 5330 Luogu P4607 [SDOI2018]反回文串 (莫比乌斯反演、Pollard Rho算法)
- 从Storm到Flink,有赞五年实时计算效率提升实践
- ip登录打印机怎么打印_不要打印,登录。
- office 2003和office 2013同时安装使用的问题
- 我的k8s随笔:命令实践
- python 条形图 stack_python使用Plotly绘图工具绘制水平条形图
- 清除Linux和window等系统的DNS缓存的命令
- Intel发6款全新9代i9/i7/i5 CPU:巅峰8核
- Tomcat系列(4)——Tomcat 组件及架构详细部分
- 【Caffe安装】import caffe时出错:can not find module skimage.io
- win10 2016 LTSB
- Sqlite数据库对时间进行比较SQL语句
- 计算机二级c 试题 答案,200409计算机二级C笔试试题(含答案)
- 移除未排序链表中的重复节点,保留最开始出现的节点
- zblog php 安装,初级教程:如何安装zblog?zblog单文件安装教程 全程有图
- finereport 激活码
- PowerPivot——DAX(函数)
- 简单聊聊消息队列的事务补偿机制
- 莱布尼兹三角形(OJ0082)