[Oracle]求不大于录入值的最大值

今天因为业务需要,要从一个表中取不大于录入值的最大值,即有一张表,里面有一个因子,是一些等级,针对每个等级,都有一个比率,本来录入的值一定是和等级相等的,现在用户提出,要支持录入一些不是标准的等级的值,可以按照一定的规则,取小于或等于录入的等级的最大等级的比率。这个是简化了的业务逻辑,为了说明这个问题,把这个问题尽量简化了说,提供一个思路,供大家讨论,欢迎大拿帮忙提供更好的方法
第一步,先建立一张表,我们先忽略一些其他的问题,比如建立索引等等,只关注具体的问题。
create table p_rate
(
div number(2) not null,
rate number(10,2) not null,
PRIMARY KEY (div)
)

假设在表中已经存在了下面这样的数据:
+-------div------rate-------+
|---------0----------1.00-------+
|---------30---------1.10-------+
|---------50---------1.20-------+
|---------90---------1.30-------+
从表中可以看出当p落在不同的区间是的取值:
当0<=p<30时,应该取0对应的比率;
当30<=p<50时,应该取30对应的比率;
当50<=p<90时,应该取50对应的比率;
当90<=p时,应该取90对应的比率。
我是这样分析的:先用录入的值p减去每一个divisor,并作为一个新的列,即使用下面的查询语句:
select div,p-div from p_rate

注:这里的p会从其他地方取得,在执行sql的时候就是具体的值了。
这样的话,就能求出来p和div的差了,就在这个差上做文章(这个文章不出轨 :wink: )!
针对一些特殊的录入值p,列举一些值的话,就会出现下面的这种情况
[table]
|序号|div|p=0|p=10|p=30|p=40|p=60|p=90|p=100|
|1|0|[color=red]0[/color]|[color=red]10[/color]|30|40|60|90|100|
|2|30|-30|-20|[color=red]0[/color]|[color=red]10[/color]|30|60|70|
|3|50|-50|-40|-20|-10|[color=red]10[/color]|40|50|
|4|90|-90|-80|-60|-50|-30|[color=red]0[/color]|[color=red]10[/color]|
[/table]

可以从这些数据中看到所取到的每个div,对应的p-div,都是取的差是最小的非负数,这就是突破点了。
再把这个问题分解一下,就是变成了取一个表的最小的非负数了。
可以用下面的SQL:

select min(div)
from (select div,p-div as pd from p_rate)
where pd>=0

经过上面一步,已经知道小于或等于录入值p的最大的div,剩下的就是从p_rate 表中取该div对应的rate了。把SQL写出来就是这样的:

select rate
from p_rate
where div = (select min(div)
from (select div,p-div as pd from p_rate)
where pd>=0)

再提供一个写法,和上面的逻辑一模一样,只是换了一个写法,这种做法可能更多的用在一些字段比较多的报表的SQL中,在这儿体现不出它的优势

with tmp as
(select div,p-div as pd
from p_rate)
select rate
from p_rate
where div = (select min(div) from tmp where pd>=0)

再次的,无比热切的欢迎更好的思路和方法 :arrow: ,最好是一个自带的function就能解决问题 :wink:
AIPex:AI + 自然语言驱动的浏览器自动化扩展 AIPex是一款革命性的Chrome扩展,通过AI技术实现自然语言驱动的浏览器自动化。它支持30多种自动化工具,包括智能标签页管理(分组、切换、批量操作)、页面内容提取(文本、链接、元数据)、交互元素操作(点击、滚动)以及表单智能填写等功能。用户只需用自然语言下达指令,即可快速完成复杂的浏览器操作,大幅提升工作效率。AIPex特别适合需要处理大量重复性网页操作的用户,如数据分析师、产品经理等。 阅读详情

相关推荐

手把手教你用Silvaco Atlas复现GaN蓝光LED仿真:从网格划分到光谱分析全流程避坑

本文详细介绍了如何使用Silvaco Atlas进行GaN蓝光LED仿真,从网格划分到光谱分析的全流程避坑指南。重点讲解了网格划分技巧、材料参数设置、极化效应处理以及结果分析方法,帮助用户快速掌握半导体器件仿真技术,提升研发效率。

weixin_42552716的博客 224

Oracle中取某几个数的最大值最小值

Oracle中取某几个数的最大值最小值 一直有误区认为Oracle或者说关系型数据库中没有取某些数据中最大值最小值的函数,其实是存在的 分别为: greatest( expr1, expr2, ... expr_n ) least( expr1, expr2, ... expr_n ) 如图: 上述两个函数都使用 N 个参数,并分别返回最大值和最小值。 另需注意参数可能具有混合数据类型。具体规则...

远行客的博客 2万+

用AI生成React/Vue页面?实测Locofy等5款工具,教你选最适合的

本文深度评测了2024年五大AI生成前端页面工具,包括Locofy、Builder.io等,从代码质量、可视化编辑器成本到企业级落地方案进行全面分析。通过实测数据和实战案例,揭示如何利用AI生成技术高效创建React/Vue页面,提升开发效率并优化性能。

m5n6o7的博客 606

oracle取大值函数,Oracle 取出多个字段列中的最大值和最小值

首先介绍两个函数(下面是两个连接):例子: 建表语句:create table EMP(EMPNO NUMBER(4) not null,ENAME VARCHAR2(10),JOB VARCHAR2(9),MGR NUMBER(4),HIREDATE DATE,SAL NUMBER(7,2),COMM NUMBER(7,2),DEPTNO N...

weixin_42470969的博客 4903

道岔故障监测系统设计(源码+开题)

通过实时监控道岔的工作状态,系统能够及时发现异常情况,预防潜在的安全隐患,从而减少事故发生的概率。此外,监测系统还能够为维护人员提供详细的数据支持,帮助他们更准确地判断道岔的磨损程度和故障类型,优化维修计划,延长道岔的使用寿命。随着智能化、自动化技术的发展,道岔故障监测系统的设计与应用也将推动铁路行业的技术进步,为实现智能铁路和未来交通系统的构建奠定基础。因此,开展道岔故障监测系统的设计研究,不仅具有重要的工程实践价值,也有助于推动铁路运输行业向更高水平的发展。

灵军程序设计 771

MuJoCo柔性体仿真实战:从FlexComp建模到自定义模型导入

柔性体仿真是机器人交互研究中不可或缺的一环,MuJoCo作为高精度物理求解器,凭借高效的求解速度与批量并行能力,成为强化学习与软体抓取任务的热门选择。其FlexComp机制将连续材料离散为粒子-约束系统,以较低建模成本模拟布料、软组织等形变行为,相比Gazebo等平台更具实时性与可扩展性。技术价值体现在自定义柔性体建模与导入流程中:通过XML配置网格密度、间距与材料参数,即可生成贴合任务需求的软体垫子或硅胶抓手。在柔性抓取、颗粒抓手、医疗仿真等场景中,该方法能快速构建可训练的环境。围绕环境搭建、FlexCo

weixin_29045585的博客 159

oracle数据库获取最大值和最小值

oracle数据库获取最大值和最小值

好记性不如烂笔头 9490

从零开始:在CentOS服务器上部署R Shiny应用的完整指南

本文提供了一份在CentOS服务器上部署R Shiny应用的完整实战指南。内容涵盖从创建专用用户、安装R语言环境、配置Shiny Server,到最终部署应用并配置防火墙的全过程。针对部署过程中常见的权限、端口及依赖问题,给出了详细的解决方案,旨在帮助数据分析师和开发者将本地Shiny应用稳定、安全地发布至生产环境。

weixin_29079743的博客 135

小于等于、 大于等于Mybatis 、oracle

1.CDATA区:它的全称为character data,以"&lt;![CDATA[ "开始,以" ]]&gt;" 结束,在两者之间嵌入不想被解析程序解析的原始数据,解析器不对CDATA区中的内容进行解析,而是将这些数据原封不动地交给下游程序处理。2.特殊字符 :xml 中表示:   &lt;= 小于等于、    &gt;= 大于等于 需加  这样的标记:     &lt;![CDATA[   ...

浅沫 2万+

把 NAST 变成你的遥控器:用 ABAP 程序精确触发与处理 Output Type

摘要 SAP中的Message Control机制通过NAST表记录输出状态,支持自动触发打印、邮件等操作。关键步骤包括: 构造NAST记录:定义输出类型、介质、处理状态等参数 调用处理函数:使用RV_MESSAGE_UPDATE_SINGLE更新表,通过WFMC_MESSAGES_PROCESS执行输出 典型应用场景: 单据补发(如PO邮件重发) 外部系统集成触发输出 故障恢复处理积压消息 注意事项: 需提交事务确保更新生效 区分S/4HANA新旧输出体系 正确处理派发时间(VSZTP)和状态(VSTAT

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 254

【Matlab】从零开始掌握 MATLAB 安装激活:从环境搭建到问题解决全指南

打开 MATLAB,点击 “主页 - 设置路径”;点击 “添加文件夹”,选择自定义的工作文件夹,点击 “保存”,重启 MATLAB 生效。MATLAB R2024a 的安装与激活是开启 MATLAB 学习的第一步,也是构建稳定学习环境的基础。本文从安装前准备、分步操作、验证测试、问题解决到环境优化,完整覆盖了新手所需的所有知识点 —— 核心要点在于:确认系统兼容、使用合法授权、选择纯英文安装路径、完成功能验证。

unber的博客 596

oracle不大于,使Oracle限制大于30

Oracle 12c中的SQL Translator Profiles可能会帮助应用程序假装Oracle支持相当长的对象名称.这可以允许您在不修改应用程序的情况下更改数据库.下面是将大于30字节的名称转换为短名称的简单示例:SQL> create table short_table_name(a varchar2(100));Table created.SQL> insert into...

weixin_29240711的博客 740

【Davinci开发】:MPU(内存保护)

【Davinci开发】:MPU(内存保护)

2209

ORA-01438: 值大于为此列指定的允许精度

转自:https://blog.youkuaiyun.com/hellolib/article/details/8729725 Number的数据声明如下: 表示 作用 说明 Number(p, s) 声明一个定点数 p(precision)为精度,s(scale)表示小数点右边的数字个数,精度最大值为38, Number(p) 声明一个...

cxws110的博客 1966

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

oracle长整型范围,oracle中integer和number类型

oracle 中integer最大值是多少INT、INTEGER 是 NUMBER 的受限子类型(只表示整数)。oracle中 integer类型的标准长度是多少?ORACLE里,INTEGER 的长度可以定义为 10 么CSS布局HTML,我来为您解 可以, 但是不清楚你到底想知道什么 ,看看 integer 的取值范围,integer 不是 oracle的标准类型。 "INTEGER 是Ora...

weixin_29207149的博客 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Oracle高级分析函数与统计函数结合使用

备注:测试数据库版本为Oracle 11g R2 这个blog我们来聊聊Oracle高级分析函数与统计统计函数结合使用 如需要scott用户下建表及录入数据语句,可参考: scott建表及录入数据sql脚本 测试数据: DROP TABLE testa; CREATE TABLE testa (area VARCHAR2 (20), month VARCHAR2 (20), amount NUMBER); insert into testa values ('上海', '1', 199

只是甲的博客 1495

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Oracle事件二 ORA-01438: 值大于为此列指定的允许精度

近日,在项目中用基本类型如int,double,float......定义了Java对象字段类型,但在插入Oracle数据类型NUMBER时一直是空值, 使用的是mybatis插入数据,没想到还有这个操作,郁闷半天.......后来又是数据精度问题,不允许插入,查找了相关资料才明白. 相关博文: https://blog.youkuaiyun.com/lishirong/article/de...

格局决定一切,智恒方远 6310

oracle 精度异常01438,ORA-01438: 值大于为此列指定的允许精度

执行insert select 语句时报错了。 Number类型的列值精度不匹配。网上搜分析解决办法报错原因:Number的数据声明如下:表示 作用 说明Number(p, s) 声明一个定点数 p(precision)为精度,s(scale)表示小数点右边的数字个数,精度最大值为38,Number(p) 声明一个整数 ...

weixin_28943467的博客 4013

oracle

Oracle 是一家全球领先的数据库软件公司,其主要产品是 Oracle 数据库系统。Oracle 数据库(Oracle Database)是一个关系型数据库管理系统(RDBMS),广泛应用于企业级数据管理、数据仓库、大数据分析和业务应用程序中。以下是 Oracle 数据库的一些主要特点和功能:

qq_63948347的博客 3851

快速入门到精通:一篇学会Oracle

Oracle全面的基础知识和知识点的举例,帮助初学者快速入门。 SQL语句,SQL查询,Oracle函数,代码块知识,条件判断/循环语句,索引、游标,锁,视图,存储过程,触发器,分区表,Oracle优化,建模

weixin_63021300的博客 4万+

oracle itl解析,對oracle ITL(事務槽)的理解

一、ITL描述:ITL(Interested Transaction List)是Oracle數據塊內部的一個組成部分,位於數據塊頭(block header),itl由xid,uba,flag,lck和scn/fsc組成,用來記錄該塊所有發生的事務,一個itl可以看作是一條事務記錄。當然,如果這個事務已經提交,那么這個itl的位置就可以被反復使用了,因為itl類似記錄,所以,有的時候也叫itl槽...

weixin_28930859的博客 597

Oracle sql进阶,不可错过的文章

文章目录一.Oracle 行转列二.Oracle 常用的字符处理三.Oracle 表连接四.Oracle层次查询小结五.Oracle高级分组小结六.Oracle with语句七.Oracle高级分析函数八.Oracle正则表达式九.Oracle高级语句Model子句 这个blog我们来聊聊Oracle的sql进阶 很多同学熟悉了Oracle sql的基本知识,sql的增删改查、表连接、分组聚合、常用函数等之后,就开始是想要进阶了。 最近抽时间整理了一下Oracle sql进阶的blog,由于个人能力有限,如

只是甲的博客 3万+

oracle表分区设计_Oracle分区详解和创建

Oracle分区Oracle在实际业务生产环境中,经常会遇到随着业务量的逐渐增加,表中的数据行数的增多,Oracle对表的管理和性能的影响也随之增大。对表中数据的查询、表的备份的时间将大大提高,以及遇到特定情况下,要对表中数据进行恢复,也随之数据量的增大而花费更多的时间。这个时候,Oracle数据库提供了分区这个机制,通过把一个表中的行进行划分,归为几部分。可以减少大数据量表的管理和性能问题。利用...

weixin_39612733的博客 188

Oracle数据库 创建触发器和序列

Oracle数据库 创建触发器+序列 自动编号

. 9544

在SQL Server Oracle MySQL当数据库中查出某值为NULL怎么办?

NULL 值的三大特点,分别是:1)NULL值不参加统计;2)NULL值不进入计算表达式;3)不能与其它值进行比较。 所谓NULL值不参加统计 即 在使用统计函数时,凡是涉及到 NULL值的都会被忽视掉(用词可能不准确),不要以为这不重要,其实在某些地方这是很重要的。而 NULL值不进入计算也就是说在进行数据之间的统计计算时,若有为 NULL值的项,那么它是不进入即不参加计算的。这也是一个不容忽

joe 2020

oracle序列缓存清除,Oracle序列

一.创建序列序列:用于产生唯一序号的数据库对象,可以为多个数据库用户依次生成不重复的连续整数,通常 使用序列生成自动生成表中的主键值。在用户自己的模式中创建序列时,必须具有CREATE SEQUENCE系统权限;在其他用户模式中创建序列时,必须具有CREATE ANY SEQUENCE系统权限;1、创建序列语句:CREATESEQUENCE seq_name[START WITH start][...

weixin_39541767的博客 1382
上一篇: Java开发的一些小经验一(判断字符串是否为空)
jiiming
博客等级 码龄17年 6粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值