SQL查询问题:基于三列计算SLA并输出Late/OnTime状态
修正后的SQL查询方案
原查询存在语法错误(SQL中不能在SELECT子句里直接使用If...Else这类流程控制写法),且ELSE分支仅完成了时间差比较,未返回要求的状态值。以下是符合需求的正确查询:
SELECT keyvalue, CASE WHEN deferred IS NULL THEN CASE WHEN DATEDIFF(minute, loaded, finished) > 720 THEN 'Late' ELSE 'OnTime' END ELSE CASE WHEN DATEDIFF(minute, deferred, finished) > 720 THEN 'Late' ELSE 'OnTime' END END AS SLA FROM ItemTable;
逻辑说明
- 外层CASE先判断
deferred是否为NULL,选择对应的时间计算基准 - 内层CASE根据时间差是否超过720分钟,返回'Late'或'OnTime'状态
- 最终仅输出
keyvalue和对应的SLA状态,匹配你要求的输出格式
示例输出
| keyvalue | SLA |
|---|---|
| ITEM001 | OnTime |
| ITEM002 | Late |
内容的提问来源于stack exchange,提问作者Hamzakhan
相关产品推荐
相关产品推荐

