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

在BigQuery中如何获取每月首日起始的周度数据并完成求和计算

BigQuery 自定义非跨月周度数据聚合方案

核心实现逻辑

我们的目标是生成不跨月份的周分组,完全匹配你的两个规则:每月第一周从1日启动、月末周不包含下月日期,核心逻辑是直接按当月日期每7天为一组做自定义周划分,无需调用默认周函数避免跨月问题。

具体实现代码

首先先把原始的字符串格式日期转为BigQuery标准DATE类型,再做周分组聚合,完整查询如下:

WITH formatted_data AS (
  -- 先把原始字符串日期转为标准DATE格式
  SELECT
    PARSE_DATE("%e %b %Y", TRIM(date)) AS order_date,
    sales
  FROM `你的原始表名`
),
week_grouped AS (
  SELECT
    order_date,
    sales,
    -- 取当月第一天作为月份标识
    DATE_TRUNC(order_date, MONTH) AS month_start,
    -- 自定义当月周数:每7天为1周,不足7天的月末部分单独成周
    CEIL(EXTRACT(DAY FROM order_date)/7) AS custom_week_of_month
  FROM formatted_data
)
-- 按自定义周分组聚合销售数据
SELECT
  FORMAT_DATE("%Y年%m月", month_start) AS 所属月份,
  CONCAT("第", custom_week_of_month, "周") AS 当月周次,
  -- 计算当前周的开始日期
  DATE_ADD(month_start, INTERVAL (custom_week_of_month - 1)*7 DAY) AS 周开始日期,
  -- 计算当前周的结束日期,取周理论结束日和当月最后一天的较小值避免跨月
  LEAST(
    DATE_ADD(month_start, INTERVAL custom_week_of_month * 7 - 1 DAY),
    LAST_DAY(month_start)
  ) AS 周结束日期,
  SUM(sales) AS 周销售总额
FROM week_grouped
GROUP BY 所属月份, 当月周次, 周开始日期, 周结束日期
ORDER BY 周开始日期

效果验证

以你提供的样例数据为例,输出结果会符合以下预期:

  • 2021年10月第1周:2021-10-01 至 2021-10-07,销售总额为对应7天数据求和
  • 2021年10月第5周:2021-10-29 至 2021-10-31,不会包含11月的日期
  • 2021年11月第1周:2021-11-01 至 2021-11-07,从当月1日开始计算

该方案兼容多月份数据批量处理,完全适配定时任务的自动化跑数需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:06:04