gpt4 book ai didi

sql - 计算开始日期和当前日期之间的工作日

转载 作者:行者123 更新时间:2023-12-03 02:52:22 25 4
gpt4 key购买 nike

我正在尝试使用预定义的 INT 值(给出 1 或 0 作为工作日或不计算滚动工作日序列)。我尝试了很多不同的代码,并在这里查看了不同的帖子,但没有一个足够具体,可以与我的代码一起使用。

预定义的 INT 值为“business_day_flag_int”。这是通过转换计算得到的“day_business_day_flag”,这是一个位值。目前,周六/周日和银行假日会触发“day_business_day_flag”值为 0,周一至周五为非假日,则值为 1。

如何让它在更新表中工作,并将其添加到表生成文件的其余部分?如果需要更多信息,请告诉我。

我已经尝试了对我这里的内容进行的一系列不同的修改和变体。如果我删除日期值,它会为我提供大约 12600 个工作日的列中所有行的 int 值。如果我使用日期范围,它会给我

DECLARE @StartDate DATETIME = '01/01/2000' --Starting value of Date Range
DECLARE @EndDate DATETIME = '01/01/2050' --End Value of Date Range
DECLARE
@DayOfWeekInMonth INT,
@DayOfWeekInYear INT,
@DayOfQuarter INT,
@WeekOfMonth INT,
@CurrentYear INT,
@CurrentMonth INT,
@CurrentQuarter INT
DECLARE @CurrentDate AS DATETIME = @startDate
SET @CurrentMonth = DATEPART(MM, @CurrentDate)
SET @CurrentYear = DATEPART(YY, @CurrentDate)
SET @CurrentQuarter = DATEPART(QQ, @CurrentDate)


UPDATE [EDW_MDM].[dbo].[CALENDAR_DIM] SET
business_day_flag_int = Convert(INT, day_business_day_flag)
UPDATE [EDW_MDM].[dbo].[CALENDAR_DIM] SET
rolling_business_day_sequence = (SELECT count(business_day_flag_int) FROM [EDW_MDM].[dbo].[CALENDAR_DIM]
WHERE business_day_flag_int = 1 and
day_date between @StartDate and @CurrentDate)

我希望“rolling_business_day_sequence”列按顺序计算过去的工作日。例如,第 1 行 = 1,第 2 行 = 2 等。直到我的日历结束。

更新1:将代码行编辑为

UPDATE [EDW_MDM].[dbo].[FCFCU_CALENDAR_DIM] SET 
rolling_business_day_sequence = datediff(day,@StartDate,day_date) WHERE day_business_day_flag = 1

这让我计算天数,并将rolling_business_day_sequence行值设置为null,其中没有day_busienss_day_flag = 1,并且仍然计算它们而不是不计算它们。我怎样才能让它不添加日期?

最佳答案

考虑在 WHERE 条件上使用窗口函数 sum,以累积计算指定日期范围内 business_day_flag_int = 1 的所有实例。但是,要在 UPDATE 中使用窗口函数,需要 CTE 或子查询。

WITH CTE AS
(
SELECT ID, SUM(CASE WHEN day_date BETWEEN @StartDate AND @CurrentDate
AND business_day_flag_int = 1
THEN 1
ELSE 0
END) OVER (ORDER BY day_date) AS running_sequence
FROM [EDW_MDM].[dbo].[CALENDAR_DIM]
)

UPDATE t
FROM [EDW_MDM].[dbo].[CALENDAR_DIM] t
JOIN CTE ON t.ID = CTE.ID
SET t.rolling_business_day_sequence = CTE.running_sequence

关于sql - 计算开始日期和当前日期之间的工作日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55498703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com