簡體   English   中英

MySQL查詢案例適用於30天,60天和未計划的輸出

[英]MySQL Query Case When for 30 Days, 60 Days, and Not Scheduled output

我已經構建了以下查詢以嘗試執行以下操作:

  1. 如果omSchedDate =今天的0到30天那么標志“30天”
  2. 如果omSchedDate =今天的31到60天那么標志“60天”
  3. 如果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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM