我需要得到一份报告,显示每周不同的用户,以显示每周的用户增长,但我需要它显示累积的不同用户。
因此,如果我有5周的数据,我想显示:不同的用户从0周到1周,不同的用户从0周到2周,不同的用户从0周到3周,不同的用户从0周到4周,不同的用户从0周到5周。
我有整整一年的数据。我知道如何做到这一点的唯一方法就是从字面上查询时间范围,一次调整一周,这是非常乏味的。我只是不知道如何查询从第0周到第1周到第0周到第52周的所有内容。
编辑-我到目前为止拥有的:
select count(distinct user_id) as count
from tracking
where datepart(wk,login_dt_tm) >= 0 and datepart(wk,login_dt_tm) <= 1然后我取这个号码,记录它,并将它更新到- datepart(wk,login_dt_tm) <= 2,等等,直到我有了所有的星期。这样我就可以每周绘制一张不错的增长图表。
这是乏味的,必须有另一种方法。
UPDATE-我使用了@siyual提供的解决方案,但是更新了它以使用一个表变量,这样我就可以在一个输出中得到所有的结果。
Declare @Week Int = 0
Declare @Totals Table
(
WeekNum int,
UserCount int
)
While @Week < 52
Begin
insert into @Totals (WeekNum,UserCount)
select @Week,count(distinct user_id) as count
from tracking
where datepart(wk,login_dt_tm) >= @Week and datepart(wk,login_dt_tm) <= (@Week + 1)
Set @Week += 1
End
Select * from @Totals发布于 2014-05-01 18:07:54
你可以试试这样的方法:
Declare @Week Int = 1
While @Week <= 52
Begin
select count(distinct user_id) as count
from tracking
where datepart(wk,login_dt_tm) >= 0 and datepart(wk,login_dt_tm) <= @Week
Set @Week += 1
End发布于 2014-05-01 18:06:42
为什么不像这样:
select count(distinct user_id) as count, datepartk(wk, login_dt_tm) as week
from tracking
group by datepart(wk,login_dt_tm)
order by week发布于 2014-05-01 18:53:32
为了记录在案,我将在一条语句中这样做,使用递归的CTE生成从1到52的数字(还可以使用numbers表):
with numbers as (
select 1 as n
union all
select n + 1
from numbers
where n < 52
)
select count(distinct user_id) as count
from tracking t join
numbers n
on datepart(wk, login_dt_tm) >= 0 and datepart(wk, login_dt_tm) <= numbers.n;把它放在一个查询中似乎更容易。
https://stackoverflow.com/questions/23413376
复制相似问题