我有客户ID及其登录日期。我想计算相对于他们的首次登录日期的星期数
我对sql还是很陌生
演示输出
ClientID Date of login Week Number
1 2019-12-20 1
1 2019-12-21 1
1 2019-12-21 1
1 2019-12-22 1
1 2019-12-29 2
1 2019-12-29 2
2 2020-01-27 1
2 2020-01-28 1
2 2020-02-05 2
2 2020-02-06 2
2 2020-02-16 3
答案 0 :(得分:1)
这是一种非常简单的日期运算,只需要为每个var config = {
deps: ['jquery'],
map: {
'*' : {
'hello' : 'js/custom'
}
},
'fotorama/fotorama': {
deps: ['jquery']
}
}
使用min
DateOfLogin
,您就可以通过窗口函数找到它。
计算从该日期到当前ClientID
之间的天数中的datediff
,将整数除以DateOfLogin
(不返回小数天数),然后添加7
以正确地抵消1
值:
WeekNum
declare @l table(ClientID int, DateOfLogin date);
insert into @l values(1,'2019-12-20'),(1,'2019-12-21'),(1,'2019-12-21'),(1,'2019-12-22'),(1,'2019-12-29'),(1,'2019-12-29'),(2,'2020-01-27'),(2,'2020-01-28'),(2,'2020-02-05'),(2,'2020-02-06'),(2,'2020-02-16');
select ClientID
,DateOfLogin
,(datediff(day,min(DateOfLogin) over (partition by ClientID),DateOfLogin) / 7) + 1 as WeekNum
from @l;
答案 1 :(得分:0)
此查询返回星期数。
select DATENAME(WW, '2019-12-20')
这是针对MSSQL的。
这可能是您的解决方案,您可能只需要研究插入的方式,并对其进行优化即可。
select 1 AS 'ClientID', '2019-12-20' AS 'LogInDate', 1 AS 'Week'
into #test
insert into #test
select top(1) 1, '2020-02-05', case DATEDIFF(week,'2020-02-05',LogInDate) when 0 then week else Week +1 end from #test where ClientID = 1 order by LogInDate desc