簡體   English   中英

如何根據此特定邏輯在我的日期維度表中創建周組列?

[英]How can I create a week group column in my Date Dimension Table based on this specific logic?

我正在使用 SQL Server 2014,我的數據庫中有一個名為 Date Dimension 的表。

它有一個名為“日期”的列,其中包含從 2013 年 1 月 1 日到 2025 年 12 月 31 日的每日日期(下面給出的列的摘錄):

Date
2022-01-01
2022-01-02
2022-01-03
2022-01-04
2022-01-05
2022-01-06
2022-01-07
2022-01-09
...
2022-01-30
2022-01-31
...

我需要根據以下邏輯在日期維度表中創建一個名為“HR_WeekGroup”的新列:

WeekGroup 將從星期一開始,在星期日結束。 WeekGroups 將分別為每個月計算。 也就是說,如果一個月的第一天是星期六,則該周的 WeekGroup 將僅包含 2 天(星期六和星期日),如果該月的最后一天是星期一,則 weekGroup 將僅包含 1 天(周一)。

這是我所追求的(基於 2022 年 1 月):

   Date          HR_WeekGroup
2022-01-01       Wk 01Jan2022-02Jan2022
2022-01-02       Wk 01Jan2022-02Jan2022
2022-01-03       Wk 03Jan2022-09Jan2022
2022-01-04       Wk 03Jan2022-09Jan2022
2022-01-05       Wk 03Jan2022-09Jan2022
2022-01-06       Wk 03Jan2022-09Jan2022
2022-01-07       Wk 03Jan2022-09Jan2022
2022-01-09       Wk 03Jan2022-09Jan2022
...              ...
2022-01-30       Wk 24Jan2022-30Jan2022
2022-01-31       Wk 31Jan2022
...

允許我創建此列的 T-SQL 代碼是什么?

我查看了以下頁面,但不知道如何將這些示例應用於我的具體問題。

什么是 SQL 語法在我的日期維度表中創建一個列,將日期分組到這個特定的周分組中?

如何在 SQL 服務器中按周對數據進行分組

Set DateFirst 1;
with cte as (
    select 
        Date_Column, 
        MONTH(Date_Column) as [MONTH], 
        DAY(Date_Column) as [DAY],
        Min(Date_Column) OVER (Partition by DATEPART(week,Date_Column), MONTH(Date_Column) ) as [MinDateWeekGroup],
        Max(Date_Column) OVER (Partition by DATEPART(week,Date_Column), MONTH(Date_Column) ) as [MaxDateWeekGroup]
    from date_dimension
)
select 
    Date_Column,
    case when [MinDateWeekGroup] = [MaxDateWeekGroup] 
        THEN CONCAT('Wk ',
    Right('0'+Convert(varchar(10), Day([MinDateWeekGroup])),2),
    Convert(char(3), [MinDateWeekGroup], 0),Convert(char(4),YEAR([MinDateWeekGroup])) )
        ELSE 
    CONCAT('Wk ',
    Right('0'+Convert(varchar(10), Day([MinDateWeekGroup])),2),
    Convert(char(3), [MinDateWeekGroup], 0),Convert(char(4),YEAR([MinDateWeekGroup])),
    '-',
    Right('0'+Convert(varchar(10), Day([MaxDateWeekGroup])),2),
    Convert(char(3), [MaxDateWeekGroup], 0),Convert(char(4),YEAR([MaxDateWeekGroup]))
    ) 
    END as [HR_WeekGroup]
from cte
order by Date_Column

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM