基于多列条件判断新增status列的SQL实现问题
实现方案
核心思路
- 优先判断
date字段是否为空,空值直接返回incomplete - 对日期非空的记录,按
person_id分区后按日期升序生成排序序号 - 匹配序号对应状态:序号1返回
start、序号2返回ongoing、序号≥3返回complete
可直接运行的SQL代码(支持窗口函数的数据库通用)
SELECT person_id, activity, combination_count, date, CASE WHEN date IS NULL THEN 'incomplete' ELSE CASE ROW_NUMBER() OVER (PARTITION BY person_id ORDER BY date ASC) WHEN 1 THEN 'start' WHEN 2 THEN 'ongoing' WHEN 3 THEN 'complete' -- 超过3次的非空记录默认返回complete,可按需调整规则 ELSE 'complete' END END AS status FROM 你的业务表名;
和你提供的示例结果对齐的调整方案
如果你的业务实际是按person_id + activity分组排序(和示例中的combination_count生成逻辑一致),仅需要修改窗口函数的分区规则即可:
-- 调整PARTITION BY字段即可匹配你的示例结果 ROW_NUMBER() OVER (PARTITION BY person_id, activity ORDER BY date ASC)
内容的提问来源于stack exchange,提问作者Raven52
相关产品推荐
相关产品推荐

