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

基于特定行值条件为现有表新增Amount difference列的SQL查询

实现新增"Amount difference"列的SQL方案

示例源表

A IdB session IdC customer TypeD ticket statusE AmountORDINAL
FirstAvipFailed100
FirstBordinarySuccess151
FirstBordinaryWaiting02

需求说明

需新增名为Amount difference的列,规则如下:

  • 当连续两行的D ticket status依次为"Success"和"Waiting",且这两行的A Id、B session Id、C customer Type完全匹配时,"Success"行的该列值为自身E Amount减去下一行的E Amount,其余行值为NULL
  • 若"Success"所在行的下一行不是"Waiting"(包括没有下一行的情况),则该行的该列值等于自身的E Amount,其余行值为NULL

SQL查询语句

SELECT
    `A Id`,
    `B session Id`,
    `C customer Type`,
    `D ticket status`,
    `E Amount`,
    ORDINAL,
    CASE
        -- 处理Success后紧跟同组Waiting的情况
        WHEN `D ticket status` = 'Success' 
             AND LEAD(`D ticket status`) OVER (PARTITION BY `A Id`, `B session Id`, `C customer Type` ORDER BY ORDINAL) = 'Waiting'
        THEN `E Amount` - LEAD(`E Amount`) OVER (PARTITION BY `A Id`, `B session Id`, `C customer Type` ORDER BY ORDINAL)
        -- 处理Success后非Waiting或无后续行的情况
        WHEN `D ticket status` = 'Success' 
             AND (LEAD(`D ticket status`) OVER (PARTITION BY `A Id`, `B session Id`, `C customer Type` ORDER BY ORDINAL) != 'Waiting'
                  OR LEAD(`D ticket status`) OVER (PARTITION BY `A Id`, `B session Id`, `C customer Type` ORDER BY ORDINAL) IS NULL)
        THEN `E Amount`
        -- 其余情况返回NULL
        ELSE NULL
    END AS `Amount difference`
FROM
    your_table_name;

说明

  • 使用LEAD()窗口函数按A Id、B session Id、C customer Type分组,以ORDINAL排序,获取下一行的状态和金额数据
  • 通过CASE分支判断不同场景,精准计算目标列的值
  • 请将语句中的your_table_name替换为实际表名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:15:34