【问题标题】:Creating a time dimension with specific dates on SQL在 SQL 上创建具有特定日期的时间维度
【发布时间】:2016-05-25 10:20:55
【问题描述】:

我正在做一个关于足球转会的分析项目。我有一个带有一个名为 FactTransfers 的事实表的模型,我需要将它链接到一个时间维度,但我需要一个特定的日期范围,即可以转移球员的日期(从 6 月 1 日到 9 月 1 日以及从 1 月 1 日到1 月 31 日)。 我看过一些与此事相关的帖子,但它们都有我不需要的代码和属性。

基本上我想要的是: 日期作为主键, 一个月的一天, 月份名称, 转会窗口(夏季或冬季), 年。

我对 sql 代码不太熟悉,我花了好几个小时试图弄明白,但没有得到我需要的结果。 提前感谢您的所有帮助!

【问题讨论】:

    标签: sql-server database dimensional-modeling


    【解决方案1】:

    这里是为日期创建和填充 Dim 表的代码。希望这会有所帮助。

    CREATE TABLE [dbo].[DimDate]
    (
        [DateKey] INT primary key, 
        [Date] DATETIME,
        [DayofMonth] TINYINT, -- Field will hold day number of Month
        [NameofMonth] VARCHAR(9),--January, February etc
        [TransferWindow] VARCHAR(20), -- Summer & Winter
    )
    
    --Specify Start Date and End date here
    --Value of Start Date Must be Less than Your End Date 
    
    DECLARE @StartDate DATETIME = '01/01/2015' --Starting value of Date Range
    DECLARE @EndDate DATETIME = '12/31/2025' --End Value of Date Range
    DECLARE @CurrentDate AS DATETIME = @StartDate
    
    WHILE @CurrentDate < @EndDate
    BEGIN
    
        INSERT INTO [dbo].[DimDate]
        SELECT
            CONVERT (char(8),@CurrentDate,112) as DateKey,
            @CurrentDate AS Date,
            DATEPART(DD, @CurrentDate) AS [DayOfMonth],
            DATENAME(MM, @CurrentDate) AS [MonthName],
            CASE WHEN (MONTH(@CurrentDate) BETWEEN 6 AND 8) OR ( MONTH(@CurrentDate) =9 AND DATEPART(DD, @CurrentDate)=1) THEN 'Summer'
                 WHEN MONTH(@CurrentDate) =1 THEN 'Winter'
                 ELSE ''
            END AS [TransferWindow]
    
        SET @CurrentDate = DATEADD(DD, 1, @CurrentDate)
    END
    
    SELECT * FROM [DimDate]
    
    --DROP TABLE [DimDate]
    

    【讨论】:

    • 非常感谢您的帮助!
    猜你喜欢
    • 2018-09-30
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    相关资源
    最近更新 更多