求一SQL ,有点绕。。
新增就是当天的用户不同于之前的用户数,
活跃就是当天count distinct 的用户数
累积就是当天以及之前所有的count distinct 用户数。
[解决办法]
--> 测试数据:@T
declare @T table([userid] varchar(3),[datetime] datetime)
insert @T
select 'aaa','2013-06-01' union all
select 'aaa','2013-06-01' union all
select 'bbb','2013-06-01' union all
select 'aaa','2013-06-02' union all
select 'ccc','2013-06-02' union all
select 'aaa','2013-06-03' union all
select 'ccc','2013-06-04' union all
select 'ddd','2013-06-04'
SELECT Convert(varchar(10),[datetime],120) AS [datetime] ,
( SELECT COUNT(DISTINCT userid)
FROM @t a
WHERE [datetime] = t.datetime
) - ( SELECT COUNT(DISTINCT userid)
FROM @t a
WHERE [datetime] < t.datetime
AND userid IN ( SELECT userid
FROM @T
WHERE [datetime] = t.[datetime] )
) AS 新增用户 ,
COUNT(DISTINCT userid) AS 活跃用户 ,
( SELECT COUNT(DISTINCT userid)
FROM @T
WHERE [datetime] <= t.[datetime]
) AS 累计用户
FROM @T t
GROUP BY [datetime]
/*
datetime 新增用户 活跃用户 累计用户
---------- ----------- ----------- -----------
2013-06-01 2 2 2
2013-06-02 1 2 3
2013-06-03 0 1 3
2013-06-04 1 2 4
*/