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

基于多条件筛选SQL行:实现每月Excel报表数据转换查询

解决方案

你的思路方向是对的,row_number() 窗口函数就是处理这类「分组筛选最新/有效记录」问题的标准方案。

核心逻辑

我们需要按 ID + PARTNER 分组(同一ID下不同合作伙伴的记录是独立的,比如你示例里的行4属于新合作伙伴,需要单独保留),在每个分组内按记录的先后顺序排序(默认用QUOTE_ID降序,因为后续生成的QUOTE_ID通常对应更新的操作;如果有专门的时间戳字段,用时间戳排序更准确),最后取每个分组内排序第一的记录。

具体SQL查询

WITH ranked_records AS (
    SELECT 
        *,
        -- 按ID和PARTNER分组,组内按QUOTE_ID降序排序,最新记录排第1
        ROW_NUMBER() OVER (
            PARTITION BY ID, PARTNER 
            ORDER BY QUOTE_ID DESC
            -- 若存在时间字段(如CREATE_DATE),替换为 ORDER BY CREATE_DATE DESC 更可靠
        ) AS rn
    FROM your_table_name
)
SELECT ID, QUOTE_ID, REASON, DECISION, PARTNER, REQUEST_LIMIT, APPROVED_LIMIT
FROM ranked_records
WHERE rn = 1;

逻辑说明

  • PARTITION BY ID, PARTNER:将数据划分为「同一ID+同一合作伙伴」的小组,避免不同合作伙伴的记录互相覆盖
  • ORDER BY QUOTE_ID DESC:假设后续操作生成的QUOTE_ID数值更大,确保最新的记录被标记为rn=1
  • 筛选rn=1的记录,即可得到每个分组内的最终有效记录,完全匹配你需要保留行3和行4的需求

扩展适配

如果你的覆盖逻辑是基于业务状态(比如补充信息请求的记录被后续批准记录覆盖),可以调整排序规则,优先保留特定状态的记录:

ROW_NUMBER() OVER (
    PARTITION BY ID, PARTNER 
    ORDER BY 
        -- 优先保留批准状态的记录
        CASE WHEN DECISION = '批准' THEN 1 ELSE 2 END,
        QUOTE_ID DESC
) AS rn

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 09:42:43