编辑:截至1月1日XXXX的开始日期
我需要根据7天的分组创建不同用户ID的计数。基本上,如果用户在该月的第1天和第2天进行呼叫,则将其计为1次。但是,如果他们在第1天和第10天打电话,那么他们会被计算2次。
表格布局:
userId CallId datetime
0 123 01/01/2016 xx:xx:xx
0 124 01/10/2016 xx:xx:xx
1 125 01/10/2016 xx:xx:xx
1 126 01/10/2016 xx:xx:xx
2 127 01/10/2016 xx:xx:xx
1 128 01/30/2016 xx:xx:xx
2 129 01/31/2016 xx:xx:xx
我需要返回的样子:
Count(UserID) Week#
1 1
3 2
2 4
感谢您的时间。
答案 0 :(得分:1)
根据Gurwinders的反应,我已经制作了以下内容并包含了几年,以便在几年内仍然可以使用。
SELECT COUNT(UserID), CallYear, CallWeek
FROM (
SELECT DISTINCT UserID,
datepart(year,datetime) as CallYear,
datepart(week,datetime) as CallWeek
FROM my_table
)
Group By CallYear,CallWeek
答案 1 :(得分:1)
这将产生1月1日开始的滚动不同计数
Declare @YourTable table (userId int,CallId int,datetime datetime)
Insert Into @YourTable values
(0,123,'2016-01-01'),
(0,124,'2016-01-10'),
(1,125,'2016-01-10'),
(1,126,'2016-01-10'),
(2,127,'2016-01-10'),
(1,128,'2016-01-30'),
(2,129,'2016-01-31')
Select D1
,D1 =DateAdd(DD,6,D1)
,Cnt=count(Distinct UserID)
From @YourTable A
Join (Select Top 500 D1=DateAdd(DD,(Row_Number() Over (Order By Number)-1)*7,'2016-01-01') From master..spt_values ) B
on datetime between D1 and DateAdd(DD,6,D1)
Group By D1
返回
D1 D1 Cnt
2016-01-01 2016-01-07 1
2016-01-08 2016-01-14 3
2016-01-29 2016-02-04 2
答案 2 :(得分:0)
你可以用这个:
select count(distinct userid), datepart(week, datetime) week, datepart(year, datetime) year
from my_table
group by datepart(week, datetime), datepart(year, datetime);
答案 3 :(得分:0)
你的开始日期是什么时候?你看过DateDiff()函数吗?
答案 4 :(得分:0)
试试这个:
With ABC
As
(select datepart(week, datetime) as week#
from table)
Select count(week#) as Times,week#
From ABC