如何修改SQL将单日查询扩展为日期范围 统计5月每日销售额
修改方案
你原查询硬编码了单日的时间范围做统计,要实现2022年5月整月按日统计销售额,只需要先构造5月全量日期序列,再关联销售表按日分组即可,修改后的SQL完全兼容你当前用的BigQuery环境,统计逻辑和原查询保持一致:
WITH may_calendar AS ( SELECT calendar_date AS date_, TIMESTAMP(calendar_date) AS day_start_ts, TIMESTAMP(DATE_ADD(calendar_date, INTERVAL 1 DAY)) AS day_end_ts FROM UNNEST( GENERATE_DATE_ARRAY('2022-05-01', '2022-05-31', INTERVAL 1 DAY) ) AS calendar_date ) SELECT FORMAT_DATE('%Y-%m-%d', mc.date_) AS date_, COUNT(s.salesId) AS `total-sales` FROM may_calendar mc LEFT JOIN `project1.sales.sales-growth` s ON (s.promoDate >= mc.day_start_ts AND s.promoDate < mc.day_end_ts) OR (s.purchaseDate >= mc.day_start_ts AND s.purchaseDate < mc.day_end_ts) GROUP BY mc.date_ ORDER BY mc.date_;
改动说明
- 用CTE生成2022年5月1日到31日的完整日期序列,预计算好每天UTC 0点的起止时间戳,不需要手动硬编码31天的日期值
- 用左连接关联销售表,就算某天没有符合条件的销售记录,当天的统计行也不会丢失,无数据时
total-sales会返回0 - 时间匹配逻辑和原查询完全对齐:只要promoDate或purchaseDate落在当日的时间窗口内就算入当日统计,这里把原BETWEEN写法改成
>= 起始 AND < 结束的区间判断,避免次日0点整的边界数据被前后两天重复统计 - 最后按日期排序,输出的日期顺序和你期望的格式完全一致
内容的提问来源于stack exchange,提问作者Sana
相关产品推荐
相关产品推荐

