我有一个表格,存储有关项目的一系列信息。项目具有ID,状态以及项目达到特定状态的日期。
我关注两种状态:关闭和完成。因此,项目表中有两个日期字段,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子句(或其他日期计算功能)中使用相应的日期字段?
答案 0 :(得分:2)
要在date_closed
不为空时使用date_completed
,在date_closed
为空时使用where coalesce(date_closed,date_completed) >= dateadd(day, -30, getdate())
,则:
status
或使用or
基于where (
([status] = 'completed' and date_completed >= dateadd(day, -30, getdate()))
or
([status] = 'closed' and date_closed >= dateadd(day, -30, getdate()))
)
进行检查:
{{1}}