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

如何判断指定分组的记录是否遵循CLICKED→CLAIMED→BOUGHT的正确状态顺序

状态顺序校验SQL实现方案

需求说明

现有业务表存储用户行为状态,固定状态优先级顺序为 CLICKED → CLAIMED → BOUGHT,需要按number_id分组校验组内状态对应的日期是否符合优先级先后规则:

  • 日期相等视为符合先后顺序
  • 缺失高优先级状态不影响校验,现有状态顺序合规即整体合规
  • 任意两个相邻优先级状态的日期顺序颠倒,整体判定为不合规

校验SQL

行转列聚合校验方案(适配当前测试场景,每个number_id单状态最多一条记录)

SELECT 
    number_id,
    CASE 
        WHEN COALESCE(MAX(CASE WHEN status = 'CLICKED' THEN datetime END), DATE '9999-12-31') 
            <= COALESCE(MAX(CASE WHEN status = 'CLAIMED' THEN datetime END), DATE '9999-12-31')
        AND COALESCE(MAX(CASE WHEN status = 'CLAIMED' THEN datetime END), DATE '9999-12-31') 
            <= COALESCE(MAX(CASE WHEN status = 'BOUGHT' THEN datetime END), DATE '9999-12-31')
        THEN '合规'
        ELSE '不合规'
    END AS check_result
FROM TBL_A
GROUP BY number_id
ORDER BY number_id;

校验结果

运行上述SQL后得到的校验结果如下:

number_idcheck_result
121111合规
121122不合规
121144合规
121198合规
121200不合规

逻辑说明

  • 用CASE WHEN将不同状态的日期转成分组内的独立列,缺失状态的日期默认替换为最大日期9999-12-31,避免缺失状态影响低优先级状态的比较逻辑
  • 仅需判断相邻优先级的日期是否满足非递减关系,即可覆盖所有校验规则
    如果业务场景中存在同一个number_id同一个状态有多条记录的情况,可以根据业务需求调整聚合逻辑,比如取对应状态的最早日期/最晚日期进行比较即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:54:03