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

SQL按Key分组获取下一事件 过滤连续重复Event2记录

问题根因梳理

原SQL存在三处核心错误,直接导致结果不符合预期:

  • 窗口函数LEAD未通过PARTITION BY Key做分组,也未按id排序,存在跨Key取值、组内顺序错乱问题,Next_Event计算逻辑完全错误
  • 内层子查询仅返回计算出的NEXT_EVENT字段,缺失外层查询需要引用的id、Key、Some_Event字段,外层无法取到对应基础值
  • WHERE条件逻辑完全写反:既错误过滤了所有非Event2的记录,也未实现「仅过滤连续重复Event2的后一条记录、将前一条Event2的Next_Event置空」的规则,还错误使用反引号包裹字符串值(反引号是字段/表名标识符,字符串值需用单引号包裹)
正确SQL实现
WITH event_seq AS (
    SELECT
        id,
        `Key`,
        Some_Event,
        -- 按Key分区、id升序取相邻下一条事件,无下一条时默认返回NULL
        LEAD(Some_Event, 1) OVER (PARTITION BY `Key` ORDER BY id) AS raw_next_event
    FROM table1
)
SELECT
    id,
    `Key`,
    Some_Event,
    -- 仅当前事件是Event2且下一个事件也是Event2时,Next_Event置NULL,其余场景保留原始下一个事件值
    CASE
        WHEN Some_Event = 'Event2' AND raw_next_event = 'Event2' THEN NULL
        ELSE raw_next_event
    END AS Next_Event
FROM event_seq
-- 仅过滤「前一条是Event2、当前也是Event2」的重复记录,其余记录全部保留
WHERE NOT (
    LAG(Some_Event, 1) OVER (PARTITION BY `Key` ORDER BY id) = 'Event2'
    AND Some_Event = 'Event2'
)
ORDER BY `Key`, id;
逻辑说明
  • 先通过CTE按正确的分区、排序规则计算每条记录的原始下一个事件,同时返回所有需要的基础字段,避免内层字段缺失问题
  • Next_Event赋值严格匹配规则:只有当前记录和下一条相邻记录都是Event2的场景,才把Next_Event设为NULL,其余场景(包括Event1接Event1、Event2接Event1、Event1接Event2)都正常返回下一个事件值
  • 过滤规则精准匹配需求:只排除「紧跟在Event2后面的Event2记录」,例如Key=1分组下id=03的Event2前面是id=02的Event2,这条记录直接不返回;其余所有记录均保留
  • 注意Key是SQL保留关键字,查询时需要用反引号包裹避免语法错误,字符串值统一用单引号包裹

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 17:21:22