Sql server 从自定义日期计算周数
我有客户ID和他们的登录日期。我想计算他们第一次登录日期的周数 我对sql相当陌生 演示输出Sql server 从自定义日期计算周数,sql-server,ssms,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
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
此查询返回周数 选择DATENAMEWW,“2019-12-20” 这是针对MSSQL的 这里可能有一个解决方案给你,你可能只需要看看你将要做的插入,也许优化它一点更好 选择1作为“客户ID”,选择2019-12-20作为“登录日期”,选择1作为“周” 试验 插入测试 从测试中选择top1 1,“2020-02-05”,案例日期diffweek,“2020-02-05”,当0时登录数据,然后选择第1周else week+1结束,其中ClientID=1订单由登录数据描述
这是一个非常简单的日期算法,只需要每个ClientID的mindateoflogin,您可以通过窗口函数找到它 计算此日期和当前DateOfLogin之间的datediff(以天为单位),整数除以7不返回小数天,然后加1以正确偏移WeekNum值: 输出
请发布您的特定sql版本您使用的是哪种dbms?说到日期/时间,许多产品远远不符合ANSI SQL…这有帮助吗?如果第一次登录是在星期六,您预计第二周什么时候开始?第一次登录后7天,或下一个星期一?获取用户的MINlogin_日期,并获取特定登录日期与此最小日期之间的天数差。除以7,这将给你一个相对于用户第一次登录的周数。没有指定dbms的问题的特定于产品的答案。至少告诉我们这是针对哪个dbms的。这是因为2019-12-20不是第一周。OP希望在第一次登录时开始计算周数。这与实际的周数无关。
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;
+----------+-------------+---------+
| ClientID | DateOfLogin | WeekNum |
+----------+-------------+---------+
| 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 |
+----------+-------------+---------+