【发布时间】:2017-04-04 23:12:14
【问题描述】:
我需要一个关于我在 SQL Server 的日期维度中创建的列之一的建议,基本上是滚动几周..
我的数据仓库中有一张表dimDate。
我想在dimdate 表中创建一个列,该列将包含任何一年的周数,并且每周应该有 7 天。
例如:2015 年有 53 周,但第 53 周只有 5 天(因为我猜在 SQL Server 中该周从星期日开始)。
我想从 2016 年开始再增加 2 天(2016 年 1 月 1 日和 2 日),以用 7 天完成第 53 周,并且 2016 年的第 1 周应该从 2016 年 1 月 3 日开始,依此类推。
如果有任何建议可以很好地开始。
【问题讨论】:
-
您几乎已经回答了自己的问题:“在 dimdate 中创建一个列,其中包含任何年份的周数”。你这样做了吗?一旦你写了正确的更新语句
-
我有 weekofyear 列,但是到第 53 周只有 5 天,我正在考虑一个合适的更新脚本,不确定它可能是什么。
-
这是业务事先手动决定的,还是这里有硬性规定?规则是什么 - 是否每周有 7 天,即使延长到明年?有没有不应该的情况?即如果第 53 周只有一天?要编写脚本,您需要明确的规则。脚本的第一部分是识别每年最后一周的数字 - 从一个选择开始。
-
是的,业务应该事先决定,不幸的是,在这种情况下,你是对的,规则是每周必须有 7 天,即使它延长到明年和第一周明年应该再次从 1 开始。如果第 53 周有 1 天,那么它必须在明年的前 6 天,所以基本上明年的第一周从 7 日开始。
-
如果它是自动规则(不是手动业务规则),那么请务必使用脚本。假设您已经有一个部分填充的周数,起点是找到每年的最后一周并计算它有多少天:
select year, max(weeknumber) wn from dimdate group by year
标签: sql sql-server-2005