如果用sql语句在已知日期往前推4周求和

  • 你好!我遇到的问题是如何用sql语句,在某一日期点往前推4周,然后计算这四周的销售总和。我用的软件是ssms。
  1. 请看第一个表格,我称为原数据表。有三个客人customer,分别是aa、bb、cc,现在在弄一个优惠活动,aa和bb都在2023年2月8日注册,cc是在2022年7月15日注册。Box of Sales是这三位客人分别在不同的时间买的产品盒数。Fiscal year 是会计年度,Fiscal week是会计周。

现在我需要求的是针对这个注册日期,往前推4周内,累计他们的总销售。

假设aa在2/8/2023注册,我可以根据 Select dateadd(week,-4,[Enrollment Date]) 得知我需要的日期间隙是2023-01-11到2023-02-08。参考第二张表格也就是Fiscal year =2023 和Fiscal Week = 28/29/30/31的总和。所以aa的注册日期往前推4周的总和是25+5=30。

同理,如果是客人cc的话就是2022-06-17 到 2022-07-15之间,参考第二张表格Fiscal Calendar,也就是2022年度的第50周、51周、52周和2023年度第1周的销售总和,也就是3+5+10=18。

img

  1. 请看第二个表格Fiscal Calendar。这是说明了每个日期对应的会计周和会计年。已知会计年分会在每一年的七月初更新。

img

img

  1. 第三个表格是我想要的最终结果。谢谢!

img

上传不了excel附件所以直接在这里复制表格了:
第一个表格:

Customer    Site     Enrollment Date    Box of Sales    Fiscal Year    Fiscal Week
aa    Guangzhou    2/8/2023    5    2022    5
aa    Guangzhou    2/8/2023    6    2022    7
aa    Guangzhou    2/8/2023    7    2023    11
aa    Guangzhou    2/8/2023    14    2023    27
aa    Guangzhou    2/8/2023    25    2023    28
aa    Guangzhou    2/8/2023    5    2023    29
aa    Guangzhou    2/8/2023    58    2023    33
aa    Guangzhou    2/8/2023    2    2023    34
bb    Guangzhou    2/8/2023    26    2022    5
bb    Guangzhou     2/8/2023    7    2023    29
bb    Guangzhou    2/8/2023    3    2023    30
bb    Guangzhou     2/8/2023    3    2023    31
cc    Shenzhen    7/15/2022    4    2022    49
cc    Shenzhen    7/15/2022    3    2022    50
cc    Shenzhen    7/15/2022    5    2022    51
cc    Shenzhen    7/15/2022    10    2023    1
cc    Shenzhen    7/15/2022    53    2023    3


第二个表格Fiscal Calendar我只复制了需要的数据:

Fiscal Year Fiscal Week Date
2022 48 6/1/2022
2022 48 6/2/2022
2022 48 6/3/2022
2022 48 6/4/2022
2022 49 6/5/2022
2022 49 6/6/2022
2022 49 6/7/2022
2022 49 6/8/2022
2022 49 6/9/2022
2022 49 6/10/2022
2022 49 6/11/2022
2022 50 6/12/2022
2022 50 6/13/2022
2022 50 6/14/2022
2022 50 6/15/2022
2022 50 6/16/2022
2022 50 6/17/2022
2022 50 6/18/2022
2022 51 6/19/2022
2022 51 6/20/2022
2022 51 6/21/2022
2022 51 6/22/2022
2022 51 6/23/2022
2022 51 6/24/2022
2022 51 6/25/2022
2022 52 6/26/2022
2022 52 6/27/2022
2022 52 6/28/2022
2022 52 6/29/2022
2022 52 6/30/2022
2022 52 7/1/2022
2022 52 7/2/2022
2023 1 7/3/2022
2023 1 7/4/2022
2023 1 7/5/2022
2023 1 7/6/2022
2023 1 7/7/2022
2023 1 7/8/2022
2023 1 7/9/2022
2023 2 7/10/2022
2023 2 7/11/2022
2023 2 7/12/2022
2023 2 7/13/2022
2023 2 7/14/2022
2023 2 7/15/2022
2023 2 7/16/2022
2023 3 7/17/2022
2023 3 7/18/2022
2023 27 1/3/2023
2023 27 1/4/2023
2023 27 1/5/2023
2023 27 1/6/2023
2023 27 1/7/2023
2023 28 1/8/2023
2023 28 1/9/2023
2023 28 1/10/2023
2023 28 1/11/2023
2023 28 1/12/2023
2023 28 1/13/2023
2023 28 1/14/2023
2023 29 1/15/2023
2023 29 1/16/2023
2023 29 1/17/2023
2023 29 1/18/2023
2023 29 1/19/2023
2023 29 1/20/2023
2023 29 1/21/2023
2023 30 1/22/2023
2023 30 1/23/2023
2023 30 1/24/2023
2023 30 1/25/2023
2023 30 1/26/2023
2023 30 1/27/2023
2023 30 1/28/2023
2023 31 1/29/2023
2023 31 1/30/2023
2023 31 1/31/2023
2023 31 2/1/2023
2023 31 2/2/2023
2023 31 2/3/2023
2023 31 2/4/2023
2023 32 2/5/2023
2023 32 2/6/2023
2023 32 2/7/2023
2023 32 2/8/2023
2023 32 2/9/2023
2023 32 2/10/2023

DATEADD(WEEK, -4, 字段) 将指定日期往前推4周

假设你要在已知日期往前推4周求和,可以使用如下的 SQL 语句:
SELECT SUM(column_name)
FROM table_name
WHERE date_column BETWEEN DATE_SUB(known_date, INTERVAL 4 WEEK) AND known_date;

在上面的语句中,你需要将 column_name 替换为你要计算和的列名,table_name 替换为你要查询的表名,date_column 替换为包含日期信息的列名。known_date 则为已知的日期值,可以用字符串或者日期格式来表示。这个语句将计算 known_date 前4周内的数据,并返回求和的结果。

思路这么清晰,实现上有啥问题。
sum统计一下就好了。