目标:
我正在尝试按周聚合数据,其中开始日期是星期一,结束日期是星期天。
预期结果:
+----------+-----------+----------+
| Date | Name | WeekDate |
+----------+-----------+----------+
| 1/1/2018 | Monday | 1/1/2018 |
| 1/2/2018 | Tuesday | 1/1/2018 |
| 1/3/2018 | Wednesday | 1/1/2018 |
| 1/4/2018 | Thursday | 1/1/2018 |
| 1/5/2018 | Friday | 1/1/2018 |
| 1/6/2018 | Saturday | 1/1/2018 |
| 1/7/2018 | Sunday | 1/1/2018 |
| 1/8/2018 | Monday | 1/8/2018 |
+----------+-----------+----------+
实际发生的情况:
+------------+------------+
| date | WeekDate |
+------------+------------+
| 2018-01-01 | 2018-01-01 |
| 2018-01-02 | 2018-01-01 |
| 2018-01-03 | 2018-01-01 |
| 2018-01-04 | 2018-01-01 |
| 2018-01-05 | 2018-01-01 |
| 2018-01-06 | 2018-01-01 |
| 2018-01-07 | 2018-01-08 |
| 2018-01-08 | 2018-01-08 |
+------------+------------+
代码:
select
cast(dateadd(week,DATEDIFF(week,0, [date]),0) as date) AS Date
,count(user_id) AS count
from ##data
为什么2018年1月7日应该在2018年1月1日,却被列入2018年1月8日的小组。
2条答案
按热度按时间mqxuamgl1#
我推荐以下日期算法:
第一条指令将星期一定义为一周的第一天。那么,
date_part()
为您提供一个表示一周中某一天的数字,您可以使用该数字将日期偏移到上一个星期一。j9per5c42#
您可以使用iso\u week对每周数据进行分组,如下所示。你可以在这里查看isou如何解释你的数据
对于您确切需要的输出,您可以尝试下面的逻辑-
此处演示