You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle SQL实现金额匹配最小区间对应审批人查询需求

问题描述

现有两张Oracle表:

  • Table A:仅包含Amount字段,数据为200、500、100
  • Table B:包含Amount_From(区间下限)、Amount_To(区间上限)、Approver(审批人)字段,数据如下:
    Amount_FromAmount_ToApprover
    -100499Approver1
    -4991000Approver2
    -50300Approver3

需求:查询Table A中每个金额,匹配Table B中包含该金额的最小区间,返回对应的审批人。

解决方案

核心思路是先筛选出所有包含目标金额的区间,再通过计算区间长度(Amount_To - Amount_From)定位每个金额对应的最小区间,最终返回对应审批人。

以下是实现SQL:

SELECT a.Amount, b.Approver
FROM TableA a
JOIN (
    SELECT 
        a_inner.Amount,
        b_inner.Approver,
        ROW_NUMBER() OVER (
            PARTITION BY a_inner.Amount 
            ORDER BY (b_inner.Amount_To - b_inner.Amount_From) ASC
        ) AS rn
    FROM TableA a_inner
    JOIN TableB b_inner 
        ON a_inner.Amount BETWEEN b_inner.Amount_From AND b_inner.Amount_To
) b ON a.Amount = b.Amount AND b.rn = 1;

代码说明

  1. 筛选符合条件的区间:子查询通过BETWEEN关联两张表,过滤出所有包含Table A金额的区间记录。
  2. 按区间长度排序编号:用ROW_NUMBER()窗口函数,以Table A的Amount分组,按区间长度升序排序,给每个分组内的记录分配序号(序号1对应最小区间)。
  3. 提取最终结果:外层查询仅保留序号为1的记录,即每个金额对应的最小区间审批人。

执行结果

运行后将得到如下输出:

AmountApprover
100Approver3
200Approver3
500Approver2

注:若需求中200需匹配Approver1,说明存在额外的区间优先级规则(而非仅按长度),此时需调整排序逻辑(比如新增区间优先级字段后按该字段排序)。

内容的提问来源于stack exchange,提问作者Madhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 03:47:41