我有一个表存储一系列项目信息。项目具有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
只是我的宠物狗:) –