Sql 获取滚动3个月期间的唯一用户数
因此,我有一个表,其中有一列用户名,然后是一列用户每次登录我们的服务时的月份1。我想得到一个独特的用户计数,查看表中每个月的滚动三个月。例如,数据如下所示:Sql 获取滚动3个月期间的唯一用户数,sql,ms-access,Sql,Ms Access,因此,我有一个表,其中有一列用户名,然后是一列用户每次登录我们的服务时的月份1。我想得到一个独特的用户计数,查看表中每个月的滚动三个月。例如,数据如下所示: username Month Bob 01/01/2017 Joe 12/01/2017 Sam 01/01/2017 Bob 01/01/2017 Joe 12/01/2017 Frank 02/01/2017 Alice 02/01/2017 John
username Month
Bob 01/01/2017
Joe 12/01/2017
Sam 01/01/2017
Bob 01/01/2017
Joe 12/01/2017
Frank 02/01/2017
Alice 02/01/2017
John 02/01/2017
Jen 03/01/2017
Month Rolling3MonthUniqueUserCount
12/01/2017 1
01/01/2017 3
02/01/2017 6
03/01/2017 6
我希望我的结果是这样的:
username Month
Bob 01/01/2017
Joe 12/01/2017
Sam 01/01/2017
Bob 01/01/2017
Joe 12/01/2017
Frank 02/01/2017
Alice 02/01/2017
John 02/01/2017
Jen 03/01/2017
Month Rolling3MonthUniqueUserCount
12/01/2017 1
01/01/2017 3
02/01/2017 6
03/01/2017 6
查询或多个查询必须做两件事:
确定中日期后3个月的日期
桌子
获取该3个月期间内的唯一用户计数
对于我的生活,我不知道如何做到这一点,任何帮助将不胜感激。谢谢:
另外,我使用的是使用T-SQL的access。这稍微限制了您可以使用的功能 在MS Access中,最简单的方法是相关子查询 首先,您需要一份月份列表:
select distinct DateSerial(datecol), Month(datecol), 1)
from t;
然后,可以使用相关子查询获取值列表:
select m.month,
(select count(*)
from t
where t.datecol >= dateadd("m", -3, m.month) and
t.datecol < m.month
) as rolling_count
from (select distinct DateSerial(datecol), Month(datecol), 1) as month
from t
) as m;
这将计算从第一个月开始的三个完整的前几个月。因此,1月、2月和3月的计数将在4月1日。如果您有不同的定义,可以调整查询
这在MS Access中有效吗
select m.month,
(select count(*)
from (select distinct name
from t
where t.datecol >= dateadd("m", -3, m.month) and
t.datecol < m.month
) as x
) as rolling_count
from (select distinct DateSerial(datecol), Month(datecol), 1) as month
from t
) as m;
我不记得MS Access的范围规则。我认为这接近正确的解决方案,但我相信它会将像用户bob这样的人计算在内,在3个月内不止一次。如果我在计数*之前添加一个select distinct,可能的解决方法是什么?