BigQuery动态获取每月第四个周四的实现方法求助
解决方案:动态获取上月第四个周四
无需通过复杂的月份天数判断,直接通过**定位上月第一个周四,再叠加3周(21天)**的方式,就能精准得到第四个周四,无论当月有4个还是5个周四。
简化后的BigQuery代码
SELECT DATE_ADD( -- 计算上月的第一个周四 DATE_ADD( DATE_TRUNC(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), MONTH), INTERVAL (5 - EXTRACT(DAYOFWEEK FROM DATE_TRUNC(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), MONTH)) + 7) % 7 DAY ), INTERVAL 21 DAY -- 加3周得到第四个周四 ) AS fourth_thursday_of_previous_month;
代码逻辑说明
- 获取上月第一天:
DATE_TRUNC(DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), MONTH)直接得到上月1号。 - 定位第一个周四:
EXTRACT(DAYOFWEEK FROM ...)取上月第一天的星期值(BigQuery中1=周日,5=周四)。(5 - 星期值 +7) %7计算从第一天到第一个周四的间隔天数(加7再取模是为了避免负数结果)。- 将间隔天数加到上月第一天,得到当月第一个周四。
- 推导第四个周四:第一个周四加21天(3周),即为当月第四个周四。
验证示例
- 当
CURRENT_DATE()为2023-12-07时,上月是2023年11月,返回结果为2023-11-23(正确的第四个周四)。 - 当
CURRENT_DATE()为2023-09-01时,上月是2023年8月,返回结果为2023-08-24(正确的第四个周四)。 - 当
CURRENT_DATE()为2023-03-01时,上月是2023年2月(仅4个周四),返回结果为2023-02-23(正确)。
内容的提问来源于stack exchange,提问作者Ivan Yap
相关产品推荐
相关产品推荐

