SQL 服务器 - 计算连续会员资格

SQL Server - calculating continuous membership

这是我尝试执行的计算逻辑:我必须计算连续加入会员的会员。例如,John 会员资格于 2017 年 1 月 1 日结束,但他在 2017 年 2 月 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 天开始,也将其计为合格会员。

您可以只使用 dateadd 函数比较开始日期和终止日期:

select
count(*)
from members
where isnull(termination_date,'') = ''
or dateadd(d,45,termination_date) > start_date

我在您的示例数据中注意到的一件事是 'active' 的值在终止日期列中。如果那是您的数据,我建议您不要这样做,而是为所有没有终止日期的成员使用值 NULL。

已编辑: 如果您的终止日期实际上是 "stringly-typed",您可以使用以下查询清除 "active" 值:

select
count(*)
from members
where termination_date = 'active'
or dateadd(d,45, replace(termination_date,'active','')) > start_date