我已经构建了以下查询以尝试&执行以下操作:
如果omSchedDate在今天的0天之前或在60天之后,则标记" Not Scheduled"
SELECT DATEDIFF(tblcom.omSchedDate, CURDATE()) AS age,
CASE
WHEN tblcom.omSchedDate > CURDATE() AND tblcom.omSchedDate < (DATE_ADD(CURDATE(),
INTERVAL 31 DAY))THEN '30 Days'
WHEN DATEDIFF(CURDATE(), tblcom.omSchedDate) > 30 THEN '60 Days'
WHEN DATEDIFF(CURDATE(), tblcom.omSchedDate) <= 0 then 'Not Scheduled'
WHEN DATEDIFF(CURDATE(), tblcom.omSchedDate) IS NULL then 'Not Scheduled'
ELSE NULL
END AS consch
FROM tblcom
ORDER BY tblcom.omSchedDate
上面的我的查询为我提供了30天列的正确输出,但是&#34; 60天&#34; &安培; &#34;未计划&#34;列不正确?
Age, conSch
-728,60 Days
-726,60 Days
-715,60 Days
-666,60 Days
-102,60 Days
-88,60 Days
-46,60 Days
-15,
-14,
-5,
-4,
2,30 Days
3,30 Days
6,30 Days
14,30 Days
27,30 Days
28,30 Days
30,30 Days
41,Not Scheduled
41,Not Scheduled
83,Not Scheduled
188,Not Scheduled
答案 0 :(得分:2)
这里有很多问题。首先,在DATEDIFF
操作中,您的减法顺序相反。它应该是:
WHEN DATEDIFF(omSchedDate, CURDATE()) > 30 THEN '60 Days'
WHEN DATEDIFF(omSchedDate, CURDATE()) < 0 THEN 'Not Scheduled'
其次,您没有检查差异超过60天,因此您需要添加该AND并且需要在检查前添加它超过30天,否则大于60的值将永远不会达到那个检查。
WHEN DATEDIFF(omSchedDate, CURDATE()) > 60 THEN 'Not Scheduled'
第三,如果omSchedDate可能为NULL(这是你的最终DATEDIFF
行最终为空的唯一方式),那么你应该首先检查它以防止可能的错误:
CASE
WHEN omSchedDate IS NULL THEN 'Not Scheduled'
您也可以将您的其他行翻译为DATEDIFF
,并留下:
CASE
WHEN omSchedDate IS NULL THEN 'Not Scheduled'
WHEN DATEDIFF(omSchedDate, CURDATE()) BETWEEN 0 AND 30 THEN '30 Days'
WHEN DATEDIFF(omSchedDate, CURDATE()) > 60 THEN 'Not Scheduled'
WHEN DATEDIFF(omSchedDate, CURDATE()) > 30 THEN '60 Days'
WHEN DATEDIFF(omSchedDate, CURDATE()) < 0 THEN 'Not Scheduled'
ELSE NULL
END AS consch