基于双条件的CASE表达式取值求助:获取最早Manual Rate对应字段值
解决方法:获取'Manual Rate'对应的最早变更原因
我明白你的需求了——要从数据里找出所有AAALTLCHANGEVALUE等于'Manual Rate'的记录中,创建时间最早的那条对应的AAALTLCHANGEREASON(也就是示例里的'Class needed')。你之前写的CASE表达式之所以没成功,是因为CASE是逐行判断的工具,没法直接帮你完成“找最早记录”的聚合逻辑,而且语法上也有小问题。
问题出在哪?
你的原表达式有几个明显的问题:
- 重复了相同的
when [AAALTLCHANGEVALUE] = 'manual rate'条件,逻辑冗余 - MIN函数的语法错误,应该写成
MIN([CREATEDDATETIME])而不是MIN[CREATEDDATETIME] - CASE无法同时返回变更原因和聚合后的最小时间,它只能针对单条记录返回一个值,没法帮你筛选出最早的那条记录
两种可行的解决方案
方案1:子查询匹配最早时间
这种方法最直接,先通过子查询找到所有'Manual Rate'记录里的最早创建时间,再用这个时间匹配对应的记录:
SELECT AAALTLCHANGEREASON FROM YourTableName -- 替换成你的实际表名 WHERE AAALTLCHANGEVALUE = 'Manual Rate' AND CREATEDDATETIME = ( SELECT MIN(CREATEDDATETIME) FROM YourTableName -- 同样替换成实际表名 WHERE AAALTLCHANGEVALUE = 'Manual Rate' )
方案2:窗口函数排序取第一条
如果需要和其他字段一起返回,或者有分组需求,用ROW_NUMBER()窗口函数更灵活:
WITH RankedManualRateRecords AS ( SELECT AAALTLCHANGEREASON, CREATEDDATETIME, -- 按创建时间升序排序,最早的记录排第1 ROW_NUMBER() OVER (ORDER BY CREATEDDATETIME ASC) AS record_rank FROM YourTableName -- 替换成实际表名 WHERE AAALTLCHANGEVALUE = 'Manual Rate' ) SELECT AAALTLCHANGEREASON FROM RankedManualRateRecords WHERE record_rank = 1
这两种方法都能准确返回你需要的'Class needed'结果,记得把YourTableName替换成你的实际表名哦!
内容的提问来源于stack exchange,提问作者user11821392
相关产品推荐
相关产品推荐

