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

如何用SQL查询获取全年1到52周完整数据 包含无记录周的补全结果

解决方案

要实现全年周数的完整输出,核心是先构造1-52周的连续序列,再和业务查询结果做左连接,无匹配的周自动补默认值即可。

具体实现(以SQL Server为例,适配你原语句使用的DATEPART语法)

WITH weeks AS (
    -- 递归生成1-52周的连续序列
    SELECT 1 AS week_num
    UNION ALL
    SELECT week_num + 1 FROM weeks WHERE week_num < 52
),
biz_data AS (
    -- 原业务逻辑改造,显式JOIN可读性更强
    SELECT 
        DATEPART(week, ad.created_date) AS week,
        COUNT(ad.activity_type_config_id) AS count,
        ud.full_name AS name
    FROM activity_detail ad
    INNER JOIN activity_type_config atc 
        ON ad.activity_type_config_id = atc.activity_type_config_id
    INNER JOIN activity_user ud 
        ON ud.activity_user_id = ad.activity_user_id
    WHERE ad.created_date BETWEEN '2021-01-01' AND '2021-12-31'
    GROUP BY DATEPART(week, ad.created_date), ud.full_name
)
-- 周序列左关联业务数据,补全缺失值
SELECT 
    w.week_num AS week,
    ISNULL(b.count, 0) AS count,
    b.name
FROM weeks w
LEFT JOIN biz_data b ON w.week_num = b.week
ORDER BY w.week_num

注意事项&适配说明

  • 原查询的日期范围仅覆盖到2021年11月17日,若要统计全年数据需将日期范围调整为当年1月1日到12月31日
  • MySQL 8.0+:CTE语法通用,将DATEPART(week, xxx)改为WEEK(xxx),ISNULL改为IFNULL即可
  • 低版本MySQL:可预先创建一张存储1-52数字的周数辅助表,替代上述CTE的weeks部分
  • 需注意跨年周的规则定义,可根据业务需求调整周函数的参数,匹配企业周统计规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:39:02