SQL Server - 计算连续成员资格

时间:2017-02-14 17:37:58

标签: sql-server tsql datediff

以下是我正在尝试的计算逻辑:我必须计算持续注册会员资格的会员。例如,约翰成员资格在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天的终止开始,那么也算作合格的成员。

1 个答案:

答案 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