2014-04-29 24 views
0

我已經建立了下面的查詢嘗試&做到以下幾點:MySQL查詢案例當30天,60天,而不是預定輸出

  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 

回答

2

這裏有很多問題。首先,您的DATEDIFF操作中的減法順序相反。它應該是:

WHEN DATEDIFF(omSchedDate, CURDATE()) > 30 THEN '60 Days' 
WHEN DATEDIFF(omSchedDate, CURDATE()) < 0 THEN 'Not Scheduled' 

其次,你不必爲大於60天的差別的檢查,所以你需要補充的是,你需要檢查前,將其添加超過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 
+1

dg99,美麗的..你的代碼的伎倆只有一個錯字: - END CASE AS consch 應該是: - END AS consch – jlig

+0

好點。我在混合[CASE語句](https://dev.mysql.com/doc/refman/5.0/en/case.html)和CASE表達式。我修好了。 – dg99

+0

嗨dg99,如果我只需要將負值標記爲「不適用」,該怎麼辦? – jlig