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

SQL查询需求:为数据表添加基于用户和周维度的版本最大值标识列

SQL查询需求:为数据表添加基于用户和周维度的版本最大值标识列

嘿,这个需求挺典型的,我给你两种实用的写法,适配不同的数据库环境:

方法一:用窗口函数(推荐,简洁高效)

如果你的数据库支持窗口函数(比如MySQL 8.0+、PostgreSQL、SQL Server、Oracle这些主流版本),这是最省心的写法:

SELECT 
    USER,
    Week,
    DAY,
    VERSION,
    CASE 
        WHEN VERSION = MAX(VERSION) OVER(PARTITION BY USER, Week) 
        THEN 'Y' 
        ELSE 'N' 
    END AS IS_MAX_VERSION
FROM 
    your_table_name; -- 记得替换成你的实际表名

逻辑说明:

  • PARTITION BY USER, Week 会把数据按用户+周分成一个个独立的分组
  • MAX(VERSION) OVER(...) 会计算每个分组里的最大版本号
  • 最后用CASE语句判断当前行的版本号是否等于组内最大值,是就标Y,否则标N

方法二:子查询关联(兼容老版本数据库)

如果你的数据库不支持窗口函数(比如MySQL 5.x这类旧版本),可以用子查询先算出每个用户每周的最大版本,再和原表关联判断:

SELECT 
    t.USER,
    t.Week,
    t.DAY,
    t.VERSION,
    CASE 
        WHEN t.VERSION = mv.max_version 
        THEN 'Y' 
        ELSE 'N' 
    END AS IS_MAX_VERSION
FROM 
    your_table_name t -- 替换成实际表名
JOIN (
    -- 子查询:先算出每个用户每周的最大版本
    SELECT 
        USER, 
        Week, 
        MAX(VERSION) AS max_version
    FROM 
        your_table_name -- 同样替换表名
    GROUP BY 
        USER, Week
) mv ON t.USER = mv.USER AND t.Week = mv.Week;

逻辑说明:

  • 子查询mv先通过GROUP BY USER, Week算出每个用户+周分组的最大版本
  • 原表t和子查询结果关联,对比每行的版本号是否等于对应分组的最大值,生成标识列

两种方法都能满足你的需求,优先推荐窗口函数的写法,代码更简洁,执行效率也更高哦。

备注:内容来源于stack exchange,提问作者Senthil

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 14:42:46