从自定义日期计算周数

时间:2019-06-04 09:58:20

标签: sql-server ssms

我有客户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 

2 个答案:

答案 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

enter image description here

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

enter image description here