gpt4 book ai didi

sql - 选择日期+3天,不包括周末和节假日

转载 作者:行者123 更新时间:2023-12-05 05:27:49 27 4
gpt4 key购买 nike

对于在 SQL 中执行日期差异的问题,我找到了许多答案,不包括周末和节假日。我的问题是我需要进行日期比较 - 有多少子记录的工作日期在父记录发送日期的三天内?

大多数日期差异答案都涉及日历表,我认为如果我可以构建一个返回日期+3 的子选择,我就可以计算出其余部分。但我不知道如何返回 date+3。

所以:

CREATE TABLE calendar
(
thedate DATETIME NOT NULL,
isweekday SMALLINT NULL,
isholiday SMALLINT NULL
);

和:

SELECT thedate AS fromdate, xxx AS todate
FROM calendar

我想要的是 todate 是 fromdate + 72 小时,不包括周末和节假日。在 isweekday 而不是 isholiday 执行 COUNT(*) 很简单,但执行 DATEADD() 则是另一回事。

我不确定从哪里开始。

最佳答案

编辑:更改为包括非工作日作为有效的起始日期。

WITH rankedDates AS
(
SELECT
thedate
, ROW_NUMBER()
OVER(
ORDER BY thedate
) dateRank
FROM
calendar c
WHERE
c.isweekday = 1
AND
c.isholiday = 0
)
SELECT
c1.fromdate
, rd2.thedate todate
FROM
(
SELECT
c.thedate fromDate
,
(
SELECT
TOP 1 daterank
FROM
rankedDates rd
WHERE
rd.thedate <= c.thedate
ORDER BY
thedate DESC
) dateRank
FROM
calendar c
) c1
LEFT JOIN
rankedDates rd2
ON
c1.dateRank + 3 = rd2.dateRank

您可以在日历表上放置日期排名列以简化此操作并避免 CTE:

CREATE TABLE
calendar
(
TheDate DATETIME PRIMARY KEY
, isweekday BIT NOT NULL
, isHoliday BIT NOT NULL DEFAULT 0
, dateRank INT NOT NULL
);

然后您将仅在非假日工作日设置 daterank 列。

关于sql - 选择日期+3天,不包括周末和节假日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16799445/

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