Snowflake SQL:如何统计最近N周每周的记录数量?
问题分析与修改建议
你的当前查询存在两个核心问题:
- 你用固定日期(
DATEADD(Day, -49, CURRENT_DATE))做DATE_TRUNC,这会让所有行返回同一个周日期,分组后只能得到一行结果,无法按每条记录所属的周进行统计。 - 没有添加过滤条件,会统计表中所有历史数据,而非最近7周的记录。
修改后的查询语句
假设你的表中存储记录时间的字段名为record_date(请替换成你实际的日期字段名),修改后的SQL如下:
SELECT DATE_TRUNC('WEEK', record_date) AS week_start_date, COUNT(table_id) AS record_count FROM data_warehouse_source WHERE record_date >= DATEADD(WEEK, -7, CURRENT_DATE) GROUP BY week_start_date ORDER BY week_start_date DESC;
关键说明
- 按记录所属周分组:用表中每条记录的日期字段
record_date做DATE_TRUNC('WEEK'),这样能将记录归类到各自所在的周。 - 过滤最近7周数据:
WHERE record_date >= DATEADD(WEEK, -7, CURRENT_DATE)确保只统计过去7周的记录,比计算49天更精准(周的起始/结束不会因跨月等情况偏移)。 - 排序优化:添加
ORDER BY week_start_date DESC可以让结果按从最新周到最旧周的顺序展示,更符合查看习惯。
如果你的业务中周的起始日不是Snowflake默认的周日,可以在DATE_TRUNC中指定起始日,比如设置周一为周起始:
DATE_TRUNC('WEEK', record_date, 'monday') AS week_start_date
内容的提问来源于stack exchange,提问作者boddhisattva
相关产品推荐
相关产品推荐

