以下是我正在尝试的计算逻辑:我必须计算持续注册会员资格的会员。例如,约翰成员资格在1-1-2017结束,但他在2017年1月15日之前再次加入,然后他被视为合格会员,但如果他加入的时间超过45天,则他没有资格获得会员资格。我尝试使用排名功能以及尝试使用DATEDIFF
功能,似乎不起作用。
任何人都可以帮忙吗?提前谢谢。
| ID | NAME | TERMINATIONDATE | STARTDATE |
|------------------------------------------|
| 2 | John | 1-1-2017 | 2-16-2017 |
| 3 | Harry | 12-1-2016 | 1-1-2016 |
| 4 | Rob | active | 1-1-2015 |
所以我需要没有终止的ID的计数,如果它们被终止并以45天的终止开始,那么也算作合格的成员。
答案 0 :(得分:0)
您可以使用dateadd函数将开始日期与终止日期进行比较:
select
count(*)
from members
where isnull(termination_date,'') = ''
or dateadd(d,45,termination_date) > start_date
我在示例数据中注意到的一件事是'active'的值在终止日期列中。如果您的数据是这样的,我建议不要这样做,而是对没有终止日期的所有成员使用NULL值。
<强>编辑:强> 如果您的终止日期实际上是“字符串类型”,则可以使用以下查询来清除“活动”值:
select
count(*)
from members
where termination_date = 'active'
or dateadd(d,45, replace(termination_date,'active','')) > start_date