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

SQL查询需求:筛选无更高金额关联的配对行

需求:筛选满足条件的记录

需要筛选出符合以下条件的行:该行的Origen(Column A)和Destino(Column B)组成的关联对(包括反向配对,比如Origen=A、Destino=B和Origen=B、Destino=A属于同一关联组)中,不存在金额(Dinero/€)更高的条目。

示例数据

Column AColumn B€
AB100
BA100
CB80
BC80
DE75
ED75

期望输出

由于B和A的配对金额(100)高于B和C的配对金额(80),因此C与B的配对行被排除:

Column AColumn B€
AB100
BA100
DE75
ED75

尝试过的方法

我尝试使用rank() over (partition by...order by ...)窗口函数,但未得到预期结果。

真实业务数据(标注“ok”的为符合条件的行)

Origen   ---   Destino  ---          Dinero     
 2   --------     13    -------      822205 € ok  
13   --------      2    -------      822205 € ok   
32   --------     13    -------      794909 €   
13   --------     32    -------      794909 €   
27   --------     32    -------      774035 € ok   
32   --------     27    -------      774035 € ok   
 2   --------     32    -------      740558 €   
32   --------      2    -------      740558 €   
30   --------     13    -------      717471 €   
13   --------     30    -------      717471 €   
27   --------     13    -------      703739 €   
13   --------     27    -------      703739 €   
17   --------     13    -------      695366 €   
13   --------     17    -------      695366 €   
30   --------     27    -------      694234 €   
27   --------     30    -------      694234 €   
 2   --------     27    -------      686425 €   
27   --------      2    -------      686425 €   
17   --------     30    -------      663328 € ok
30   --------     17    -------      663328 € ok

解决方案

核心思路是:先将每个Origen-Destino配对转化为无序的关联组(比如把Origen和Destino按大小排序,生成统一的组标识),再计算每个组的最大金额,最后只保留金额等于对应组最大金额的行。

SQL代码示例

WITH grouped_data AS (
    SELECT 
        Origen,
        Destino,
        Dinero,
        -- 生成无序组标识:确保A-B和B-A属于同一组
        CONCAT(LEAST(Origen, Destino), '-', GREATEST(Origen, Destino)) AS group_id,
        -- 计算每个组的最大金额
        MAX(Dinero) OVER (PARTITION BY CONCAT(LEAST(Origen, Destino), '-', GREATEST(Origen, Destino))) AS max_group_amount
    FROM your_table_name
)
SELECT Origen, Destino, Dinero
FROM grouped_data
WHERE Dinero = max_group_amount;

代码说明

  1. 生成无序组标识:用LEAST()和GREATEST()函数将Origen和Destino按升序拼接,让反向配对归为同一组。
  2. 计算组内最大金额:通过窗口函数MAX(Dinero) OVER (PARTITION BY group_id)获取每个组的最高金额。
  3. 筛选目标行:保留金额等于对应组最大金额的记录,自动排除组内存在更高金额的配对行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 10:02:32