[英]MySQL Query Case When for 30 Days, 60 Days, and Not Scheduled output
我已經構建了以下查詢以嘗試執行以下操作:
如果omSchedDate在今天的0天之前或在60天之后,則標記為“未計划”
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天列的正確輸出,但“60天”和“未計划”列不正確?
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
這里有很多問題。 首先,在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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.