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

如何用SQL实现Excel中基于年度周数列生成全局累计周数列?

实现Excel全局累计周数的SQL方案

核心逻辑对应

Excel公式=IF(I727=I726,J726,J726+1)的本质是:按日期顺序逐行比较,若当前行年度周数和上一行相同,全局累计周数不变;否则在上一行基础上加1。用SQL实现的关键是借助窗口函数获取上一行数据,再通过累计求和完成递增逻辑。

通用SQL实现代码

假设你的数据表名为weekly_data,包含日期列record_date(用于保证行顺序和Excel一致)、年度周数列annual_week(对应Excel的Column I),代码如下:

SELECT
    record_date,
    annual_week,
    SUM(flag) OVER (ORDER BY record_date) AS global_cumulative_week
FROM (
    SELECT
        record_date,
        annual_week,
        CASE
            -- 第一行无前置数据,标记为1(对应全局累计起始值)
            WHEN LAG(annual_week) OVER (ORDER BY record_date) IS NULL THEN 1
            -- 当前年度周数与上一行不同时,标记为1(触发累计+1)
            WHEN annual_week != LAG(annual_week) OVER (ORDER BY record_date) THEN 1
            -- 年度周数相同时,标记为0(累计值不变)
            ELSE 0
        END AS flag
    FROM weekly_data
) AS sub;

自定义起始值调整

如果你的全局累计周数不是从1开始(比如初始值是53),只需在外层累计求和后加上「起始值-1」即可。例如起始值为53时:

SUM(flag) OVER (ORDER BY record_date) + 52 AS global_cumulative_week

说明

  • LAG()函数:用于按日期排序后获取上一行的年度周数,主流数据库(MySQL 8.0+、PostgreSQL、SQL Server、Oracle)均支持该函数。
  • 必须按record_date排序:确保行顺序和Excel逐行存储的顺序完全一致,否则逻辑会出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 23:12:08