SQL中的成员资格计算逻辑

时间:2019-03-29 11:58:42

标签: sql-server

我有一张桌子,上面有一组成员,他们的覆盖范围开始日期,但没有结束日期。我需要编写一个查询,这将帮助我确定在给定年份中列表中有多少个唯一成员。因此,基本上,我需要按年细分的唯一成员数,因为我只有他们的会员资格的开始日期,而没有结束日期。这将使我对每年退出的人数有一个认识。

输入

Member  Start date  End date
------------------------------
A       1/1/2016    
B       1/2/2016    
C       1/3/2016    
D       1/2/2017    
E       1/3/2017    
F       1/5/2018    

预期结果将是:

Year    Member Count    
---------------------
2016    3   
2017    2   
2018    1

如果该成员已包括在2016年,2017年的人数中,则意味着他已经在我身边2年了。我知道开始日期,我会指定每年的12/31直到他在那里作为结束日期,这给了我他作为我的客户的时间。希望这是有道理的。我需要弄清楚客户何时退出的原因是,我不仅要知道我每年有多少客户,而且还要知道在某一年中有多少客户以及他担任客户的持续时间。希望这有道理。

input/output explanation

大家好,

请忽略问题的第一部分,让我重新说明问题。

在上面的示例中,假设我具有会员ID和开始日期,该开始日期指示他成为客户的日期。是否有可能找到按月和年细分的有资格的不同成员的数量,并找到按月和年细分的在特定月份有资格的不同成员的数量?

例如,从2011年1月开始,如果我们有10个客户,则2月有5个新客户加入,上个月的8个仍是我的客户,因此2月的独立客户数为13,2月的新成员总数为5

1 个答案:

答案 0 :(得分:1)

根据我对您提出的问题的推断,结束日期并不重要。按年份分组并计算不同的会员ID:

library(stringr)
str_replace(text, "^[^.]+\\.\\s*", "")
#[1] "I want to purchase clothes. Also, I want to buy shoes."

如果只想获得缺少成员和结束日期的结果,请在SELECT YEAR(StartDate) , COUNT(DISTINCT MemberID) FROM dbo.YourTable GROUP BY YEAR(StartDate) ORDER BY YEAR(StartDate) 之前添加WHERE EndDate IS NULL