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

如何编写CASE WHEN语句判断订单创建超90分钟但当日的场景

CASE WHEN实现订单时间间隔分类的正确写法

要完成三类订单的无重叠划分,先明确两个必要的判断维度:

  • 订单创建时间到下单完成时间的分钟级差值:记为diff_min,通用计算逻辑为TIMESTAMPDIFF(MINUTE, create_time, pay_time),注意必须用下单时间减创建时间,避免出现负差值
  • 两个时间是否归属同一个自然日:不同数据库的日期截断写法略有区别,MySQL用DATE(create_time) = DATE(pay_time),PostgreSQL用create_time::DATE = pay_time::DATE,Hive/Spark SQL用TO_DATE(create_time) = TO_DATE(pay_time)

CASE WHEN遵循顺序匹配逻辑:从上到下校验条件,命中第一个符合要求的分支即返回结果,分支顺序不能随意调换,否则会出现分类错误。

你需要的“创建后超过90分钟但当日下单”分支,需要放在90分钟内判断的分支之后,结合同自然日条件做筛选,完整可运行代码如下:

CASE
    WHEN diff_min <= 90 THEN 'within 90 minutes'
    -- 目标场景:超90分钟但当日下单
    WHEN diff_min > 90 AND DATE(create_time) = DATE(pay_time) THEN 'over 90 minutes and same day'
    -- 剩余场景全部为创建次日及之后下单,用ELSE直接承接
    ELSE 'next day or later'
END

逻辑说明

  • 第一个分支已经筛走了所有90分钟内下单的订单,第二个分支无需重复处理时间差≤90的场景,叠加同自然日判断后,就能精准匹配目标场景,不会出现边界重叠
  • 第三类场景不需要单独写复杂的时间判断:所有不满足前两个分支的订单,必然是下单时间在创建次日及之后,用ELSE承接即可,代码更简洁,也能减少条件写错的概率
  • 如果你的业务自然日口径和数据库默认时区不一致(比如用UTC时间、自定义日切时间不是0点),需要先把时间转换为对应时区、按日切规则截断后,再做同日期判断,避免统计口径偏差

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 20:15:44