You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在BigQuery中提取各季度最后工作日的问题求助

提取季度最后工作日的BigQuery修正方案

你的问题出在直接取季度首日前一天,没考虑周末的情况。可以通过判断日期的星期几来调整,以下是能得到正确结果的代码:

SELECT 
  -- 计算最后工作日:如果是周日减3天,周六减2天,其他日期减1天
  CASE 
    WHEN EXTRACT(DAYOFWEEK FROM DATE_SUB(example, INTERVAL 1 DAY)) = 1 THEN DATE_SUB(example, INTERVAL 3 DAY)
    WHEN EXTRACT(DAYOFWEEK FROM DATE_SUB(example, INTERVAL 1 DAY)) = 7 THEN DATE_SUB(example, INTERVAL 2 DAY)
    ELSE DATE_SUB(example, INTERVAL 1 DAY)
  END AS last_workday,
  -- 格式化对应的星期名称
  FORMAT_DATE("%A", 
    CASE 
      WHEN EXTRACT(DAYOFWEEK FROM DATE_SUB(example, INTERVAL 1 DAY)) = 1 THEN DATE_SUB(example, INTERVAL 3 DAY)
      WHEN EXTRACT(DAYOFWEEK FROM DATE_SUB(example, INTERVAL 1 DAY)) = 7 THEN DATE_SUB(example, INTERVAL 2 DAY)
      ELSE DATE_SUB(example, INTERVAL 1 DAY)
    END
  ) AS weekday_name
FROM UNNEST(GENERATE_DATE_ARRAY('2013-01-01', '2030-04-01', INTERVAL 3 MONTH)) AS example

关键逻辑说明:

  • BigQuery里EXTRACT(DAYOFWEEK FROM date)返回1代表周日,7代表周六
  • 针对原季度最后一天(季度首日前一天)的星期情况做调整:
    • 周日(值1):往前推3天到周五
    • 周六(值7):往前推2天到周五
    • 工作日则直接保留原日期

运行这段代码后,就能得到你期望的结果:比如2013-03-31(周日)会变成2013-03-29(周五),2013-06-30(周日)变成2013-06-28(周五),其余工作日保持不变。

内容的提问来源于stack exchange,提问作者Sara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 08:39:46