首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个期间标志,其中结束日期基于不一致的假日。

创建一个期间标志,其中结束日期基于不一致的假日。
EN

Stack Overflow用户
提问于 2022-11-22 17:23:03
回答 1查看 11关注 0票数 0

我正在为我的业务编写一个日期维度表,包括您的标准日期度量以及假日。我想补充的是一些重要的商业时期的标志,比如暑假(比如5/25-8/15 )。这很容易用设定的日期来完成,就像那些。然而,我想添加的一个句号是“狂欢节季节”。这从每年的01/06开始,但只在狂欢节之后结束,而狂欢节则是基于复活节的日期。这是一个复杂的计算,以至于我使用我在网上找到的函数将复活节和相关假日(包括Mardi Gras)添加到单独的假日维度中,然后将其与日期维度合并到Calendar视图中。

我想写一段代码,如果日期是01/06和那年狂欢节的日期,就会给出一个“是”的标志,但这真的让我很不爽。

我尝试了以下子查询:

代码语言:javascript
复制
 MardiGrasFlag = 
CASE
 WHEN FORMAT([Date], 'MM/dd') BETWEEN '01/06' AND 
(SELECT FORMAT(d.[Date], 'MM/dd') 
 FROM dbo.DateDimension AS d
  LEFT JOIN dbo.HolidayDimension AS h ON d.[Date] = h.[Date] 
 WHERE [Holiday Text] = 'Mardi Gras') THEN 'YES'

但是,这会产生一个错误(正如预期的那样),因为它会获得多个结果。我尝试过在查询中添加TOP 1,但是它总是使用表中的第一个Mardi Gras日期。我需要的东西,检查日期在有关的年份,并使用狂欢节的日期为同一年,但无法确定它。

EN

回答 1

Stack Overflow用户

发布于 2022-11-23 12:03:27

你不只是想要每年马迪格拉斯时期的最高日期吗?此外,我认为您需要使用相关的子查询,例如:

代码语言:javascript
复制
UPDATE dbo.DateDimension d
set d.MardiGrasFlag = 
CASE
 WHEN FORMAT(d.[Date], 'MM/dd') BETWEEN '01/06' AND 
 (SELECT MAX(FORMAT(h.[Date], 'MM/dd'))
  FROM dbo.HolidayDimension AS h ON 
  FORMAT(d.[Date], 'YYYY') = FORMAT(h.[Date], 'YYYY')
  AND h.[Holiday Text] = 'Mardi Gras'
 ) 
THEN 'YES' ELSE 'NO' END
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74536728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档