Oracle数据库Bug:相关子查询多层嵌套报错:标识符无效

news/2024/10/20 7:26:28/

Oracle Bug?

  • 一、案例描述
  • 二、解决方案
    • <一>、升级版本
    • <二>、改写语句

一、案例描述

  • 在Mysql中常常有如下写法
  • 用相关子查询 + order by desc + limit 1来完成需求
select code,date,(select value from test t1 where t.code = t1.code and t1.date between date_sub(t.date,interval 1 year) and t.date order by t1.date desc limit 1) as valuefrom test t

因为oracle不支持limit,所以必须改写为row_number()或者rownum,如下所示

select code,date,(select valuefrom (select value,row_number()over(order by t1.date desc) as rnfrom test t1 where t.code = t1.code and t1.date between date_sub(t.date,interval 1 year) and t.date) where rn <= 1) as valuefrom test t

把这条Sql拿到Oracle去执行,是报错的,报date标识符无效,这明显不大合理,在我的印象中,oracle是支持这种写法的,而且一般Mysql支持的特性Oracle也支持,后面发现是oracle版本的问题
我把这条Sql语句拿到Oracle 19c执行是没有问题的,而报错的oracle版本是11.2.0.3.0

二、解决方案

<一>、升级版本

  • 19c是支持的,可以试下12c或其它版本

<二>、改写语句

  • keep函数:取同一个分组下以某个字段排序后,对指定字段取最小或最大的那个值

语法:
min | max (column1) keep (dense_rank first | last order by column2) over (partition by column3)

  • 最前是聚合函数,如min、max、sum、avg …
  • column1是要计算的列
  • dense_rank first | last是keep的属性,表示按照分组、排序结果取第一个、最后一个

把上述代码改成keep语句,只用一层嵌套子查询

select code,date,(select max(value)keep(dense_rank first order by t1.date desc)from test t1 where t.code = t1.code and t1.date between date_sub(t.date,interval 1 year) and t.date ) as valuefrom test t

http://www.ppmy.cn/news/1427698.html

相关文章

修复vite中使用react提示Fast refresh only works when a file only exports components.

前言 我通过 vite 构建了一个 react 应用并使用 react.lazy 来懒加载组件&#xff0c;但是在使用过程中 一直提示 Fast refresh only works when a file only exports components. Move your component(s) to a separate file.eslint(react-refresh/only-export-components)。…

何时使用 GraphQL、gRPC 和 REST?

构建 API 是现代工程中开发人员的最重要任务之一。这些 API 允许不同的系统进行通信和数据交换。虽然 REST 多年来一直是实现 API 的事实标准&#xff0c;但今天也有新兴的标准&#xff0c;如 gRPC 和 GraphQL。 什么是 API&#xff1f; “应用程序编程接口”&#xff08;API&a…

mybatis 调用修改SQL时 出现了一个问题 没有修改成功也没有报错

文章目录 问题描述 问题描述 今天遇到的这个问题到最后真的是怕我自己给气哭了&#xff0c;唉&#xff0c;大致如下&#xff1a; 这是controller层代码&#xff0c;前端传的值都有&#xff0c;但是去调用updateWechatBulkNotification时&#xff0c;修改失败&#xff0c;也不报…

009 springboot整合mybatis-plus 增删改查 ajax 登录退出accessToken

文章目录 ConfigRegistCenter.javaMybatisplusConfig.javaCustomerController.javaReceiveAddressJsonController.javaCustomer.javaLoginCustomer.javaReceiveAddress.javaJwtInterceptor.javaCustomerMapper.javaReceiveAddressMapper.javaCustomerServiceImpl.javaReceiveAd…

车载以太网DoIP 协议,万字长文详解

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

2024年Getx教程_Flutter+Getx系列实战教程介绍

Getx介绍&#xff1a; GetX 是 Flutter 上的一个轻量且强大的解决方案&#xff0c;它是一个轻量级的Flutter框架。Getx不仅具有状态管理的功能&#xff0c;还具有路由管理、主题管理、国际化多语言管理、Obx局部更新、MVC视图业务分离、网络请求、数据验证等功能。GetX 官方还…

音视频封装格式解析(1)——H264格式简析,I/P/B帧是什么?H264压缩原理

文章目录 1. H264编码参数2. H264编码原理2.1 压缩原理2.2 编码结构解析 3. NALU结构4. H264 annexb模式5. 补充说明5.1 I帧5.2 P帧5.3 B帧 1. H264编码参数 视频质量和⽹络带宽占⽤是相⽭盾的。通常情况下&#xff0c;视频流占⽤的带宽越⾼则视频质量也越⾼&#xff0c;需要的…

LeetCode 每日一题 2024/4/15-2024/4/21

记录了初步解题思路 以及本地实现代码&#xff1b;并不一定为最优 也希望大家能一起探讨 一起进步 目录 4/15 706. 设计哈希映射4/16 924. 尽量减少恶意软件的传播4/17 928. 尽量减少恶意软件的传播 II4/18 2007. 从双倍数组中还原原数组4/19 1883. 准时抵达会议现场的最小跳过…