我有一個表存儲一系列項目信息。項目具有ID,狀態以及項目達到特定狀態的日期。SQL - 使用Case語句在Where子句中提取計算日期字段
我關心兩種狀態:關閉並完成。因此,項目表中有兩個日期字段,date_closed和date_completed。項目在關閉前完成。
我想要做的是獲得在過去30天內已完成或關閉的項目記錄數。因此,我需要計算date_completed字段中已完成的項目以及date_closed字段中的已關閉項目,這兩個項目都有30天的限制。
數據看起來是這樣的(今天的日期是2017年3月8日)
id | status | date_completed | date_closed
-------------------------------------------------------------------
1 completed March-1-2017 NULL
2 completed Jan-1-2017 NULL
3 closed Dec-1-2016 March-1-2017
4 closed Dec-1-2016 March-1-2017
5 closed Dec-1-2016 Jan-1-2017
我在尋找的結果是數字「3」,因爲有跡象表明已完成或關閉三個項目過去30天(ID爲1,3和4)。
我知道,日期計算是一樣的東西
WHERE DATEDIFF(day, CURDATE(),date_completed/date_closed) <= 30
然而
,我不知道如何根據項目情況來選擇合適的日期字段。我幾乎可以肯定這裏需要提供一個案例陳述,但是對於DATEDIFF的要求正在拋棄我。
如何根據每個項目的狀態在DATEDIFF子句(或其他日期計算函數)中使用適當的日期字段?
當他們將發佈格式正確的日期?! +1 –
@JohnCappelletti根據我迄今爲止的經驗,我的預測永遠不會。但我們可以永遠希望! [xkcd PSA ISO 8601](https://xkcd.com/1179/)。至少這裏的人不能被誤解。 'yyyy-dd-mm'是那些特別棘手的問題。特別是當他們僅在本月的前12天時。 – SqlZim
只是我的寵物狗:) –