创建结束日期基于不一致假日的句号标志



我正在为我的业务处理一个日期维度表,包括您的标准日期度量以及假日。我想补充的是,在某些重要的商业时期,比如暑假(比如5月25日至8月15日),会有一面旗帜。这在固定的日期很容易做到,就像这些。然而,我想添加的一个周期标志是"Mardi Gras season"。这个节日从每年的1月6日开始,但只在狂欢节之后结束,而狂欢节又是根据复活节的日期而定的。这是一个复杂的计算,以至于我使用了一个在网上找到的函数,将复活节和相关假期(包括Mardi Gras)添加到一个单独的Holiday维度,然后将该维度与日期维度合并到Calendar视图中。

我想写一个代码,如果日期在01/06和那年的狂欢节日期之间,则给出一个"YES"标记,但是这真的难倒了我。

我尝试了以下子查询:

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日期。我需要一些东西来检查问题年份的日期,并使用同年的狂欢节日期,但无法计算出来。

难道你不想要每年Mardigras期的最大日期吗?此外,我认为你需要使用一个相关的子查询,例如:

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

最新更新