我制作了一个 CTE,其中有一个日期表和一个假期表,这样我就可以标记工作日(不是周末或假期的日子),如下所示:
dateholidays AS (
SELECT
datetable.date,
CASE
WHEN datetable.date = holidays.date OR EXTRACT(DAYOFWEEK FROM datetable.date) IN (1, 7)
THEN False
ELSE True
END AS businessday
FROM datetable left join holidays ON datetable.date = holidays.date
)
然后,我将此日期表加入到“日期”的主表中,其中有“票证 ID”、“优先级”、“创建日期”和“更新日期”等列。
当我加入表格时,由于每一行代表一张票,因此有多行具有相同的日期(因为一天内可以提交多张票),看起来像这样(减去其余列)
日期 | 票证号码 |
---|---|
7 月 23 日 | 237738 |
7 月 23 日 | 237737 |
我想根据“优先级”获得“更新截止日期”。例如,如果优先级为“低”,则截止日期为 5 个工作日(“更新”栏 + 5 个非周末和非节假日)等
我尝试使用 COUNTIF 和 Partitions,但最终没有给我带来任何有用的东西。分区只是计算相同“日期”的数量。在工作日使用 COUNTIF 也只给了我每行“1”。
使用递归日期系列 AS ( SELECT DATE('2023-01-01') AS current_date, 1 AS day_count 联合所有 选择 DATE_ADD(当前日期,间隔 1 天),day_count + 1 FROM 日期系列 WHERE day_count < 100 ), BusinessDays AS ( SELECT current_date FROM DateSeries WHERE EXTRACT(DAYOFWEEK FROM current_date) NOT IN (1, 7) -- Exclude Saturdays (1) and Sundays (7) ) SELECT MIN(current_date) AS target_date FROM BusinessDays WHERE current_date > DATE('2023-01-01') -- 开始日期 限制 5 -- 工作日数