【问题标题】:Group by start and end of the week date按星期开始和结束日期分组
【发布时间】:2021-09-08 21:41:52
【问题描述】:

我有以下促销日期:

Group: Ambient
Start Date: 03/11/2020   End Date: 09/11/2020
Start Date: 10/11/2020   End Date: 16/11/2020

Group: Chilled
Start Date: 04/11/2020   End Date: 10/11/2020
Start Date: 11/11/2020   End Date: 17/11/2020
etc 

我的数据由以下列组成: 日期(每日)、组(环境/冷藏)、净销售额、销量

我想将数据分组如下:

Weekly Date, Group, Net Sales, Volume Sold

我希望一周从星期二开始到星期一结束,具体取决于它所属的组类型。如果产品冷藏,我希望一周从周三开始,到周二结束。我想这样做并包含一个历史视图,以将前几周与促销周进行比较示例

        Week Date     Group      Net Sales    Volume
Row 1 - 27/10/2020    Ambient    £900         30
Row 2 - 03/11/2020    Ambient    £1000        50

Row 3 - 04/11/2020    Chilled    £2000        40
Row 4 - 11/11/2020    Chilled    £1000        30

更改星期日期的 SQL 查询是什么?

【问题讨论】:

    标签: sql date datetime group-by


    【解决方案1】:

    可能有其他方法可以做到这一点,但我会首先创建一些函数,按照我的意愿返回 DOW(星期几)(周二 0,... 周一 6),然后创建另一个函数 FDOW(一周的第一天)使用 DOW。即:

    -- Tuesday = 0...Monday = 6
    CREATE FUNCTION [dbo].[DOW]
    (
        @date DATETIME
    )
    RETURNS INT
    AS
    BEGIN
        -- Add the T-SQL statements to compute the return value here
        RETURN (@@DATEFIRST + DATEPART(dw, @date) - 1 - 2) % 7;
    END;
    
    CREATE FUNCTION [dbo].[FDOW]
    (
        @date DATETIME
    )
    RETURNS DATETIME
    AS
    BEGIN
        RETURN DATEADD(d, -dbo.DOW(@date), CAST(@date AS DATE));
    END;
    

    拥有这样的功能很容易在“WeekStart”上进行分组,这是我们的 FDOW 功能:

    Select dbo.FDOW(Dates) as WeekOf, [Group], 
       sum([Net Sales]) [Net Sales],
       sum([Volume Sold]) [Volume]
    from myTable
    group by dbo.FDOW(Dates) as WeekOf, [Group];
    

    【讨论】:

      猜你喜欢
      • 2021-07-26
      • 2012-04-20
      • 2022-01-23
      • 2017-01-11
      • 1970-01-01
      • 2021-07-05
      • 2012-08-19
      • 2016-10-19
      • 2022-11-16
      相关资源
      最近更新 更多