首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求1SQL ,有点绕。

2013-07-04 
求一SQL ,有点绕。。新增就是当天的用户不同于之前的用户数,活跃就是当天count distinct 的用户数累积就是当

求一SQL ,有点绕。。
求1SQL ,有点绕。

新增就是当天的用户不同于之前的用户数,
活跃就是当天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
*/

热点排行