Redshift中日期字段时间范围判断的Case语句问题求助
Redshift Case语句逻辑修正方案
问题根源
你的Case语句逻辑完全错误:你用Last_Activity_End_Date和自身加3年后的日期做比较,比如2018-12-01加3年是2021-12-01,任何日期都必然小于自身加3年的结果,所以第一个条件永远成立,不管记录日期有多早,都会返回3 Years,这和你的需求完全相悖。
正确代码实现
你需要将活动日期和当前日期往前推3年的日期做比较,同时优先处理NULL情况(Case语句按顺序判断,NULL值不会触发后续条件):
CASE WHEN activity_end_date_time IS NULL THEN 'Null' WHEN activity_end_date_time >= DATEADD(year, -3, CURRENT_DATE) THEN '3 years' ELSE 'More than 3 years' END AS "Last_Activity_Identifier"
逻辑说明
- 首先判断字段是否为
NULL,是则返回Null - 若活动日期晚于等于当前日期往前推3年,说明在近3年内,返回
3 years - 其余情况(活动日期早于当前日期往前推3年),返回
More than 3 years
针对你的示例验证
以当前日期2023-01-26为例:
DATEADD(year, -3, CURRENT_DATE)得到2020-01-26- 当
activity_end_date_time为2018-12-01时,该日期早于2020-01-26,会返回More than 3 years,符合你的预期
内容的提问来源于stack exchange,提问作者Masond3
相关产品推荐
相关产品推荐

