如何使用 SQL 在 Big Query 中获取特定日期之后多个工作日的日期?

问题描述 投票:0回答:1

我制作了一个 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”。

sql google-bigquery
1个回答
0
投票

使用递归日期系列 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 -- 工作日数

© www.soinside.com 2019 - 2024. All rights reserved.