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

如何基于分组max(version)在数据表新增FLAG列标记最高版本记录

实现方案

1. SQL 实现

用窗口函数MAX()结合OVER()子句,按指定分组计算每组的最大VERSION,再通过CASE语句生成FLAG列:

SELECT 
    USER,
    WEEK_ID,
    START_TIME,
    ACTIVITY_TIME,
    EXTRACT_ID,
    VERSION,
    CASE 
        WHEN VERSION = MAX(VERSION) OVER (PARTITION BY USER, WEEK_ID, START_TIME) 
        THEN 'Y' 
        ELSE 'N' 
    END AS FLAG
FROM your_table_name;
  • PARTITION BY USER, WEEK_ID, START_TIME 按指定字段分组,自动排除ACTIVITY_TIME和EXTRACT_ID
  • MAX(VERSION) OVER (...) 计算每组内的最大VERSION值
  • CASE语句对比当前记录的VERSION和组内最大值,完成Y/N标记

2. Python Pandas 实现

如果用Pandas处理本地数据,可通过groupby+transform快速生成FLAG列:

import pandas as pd

# 假设数据已加载到DataFrame df中
df['FLAG'] = df.groupby(['USER', 'WEEK_ID', 'START_TIME'])['VERSION'].transform(lambda x: x == x.max()).map({True: 'Y', False: 'N'})
  • groupby(['USER', 'WEEK_ID', 'START_TIME'])['VERSION'] 按指定字段分组并锁定VERSION列
  • transform(lambda x: x == x.max()) 对每组判断每条记录的VERSION是否为组内最大值,返回布尔值
  • map({True: 'Y', False: 'N'}) 将布尔结果转换为需求的Y/N标记

3. Spark SQL 实现

大数据场景下用Spark处理,逻辑和普通SQL一致:

SELECT 
    USER,
    WEEK_ID,
    START_TIME,
    ACTIVITY_TIME,
    EXTRACT_ID,
    VERSION,
    CASE 
        WHEN VERSION = MAX(VERSION) OVER (PARTITION BY USER, WEEK_ID, START_TIME) 
        THEN 'Y' 
        ELSE 'N' 
    END AS FLAG
FROM your_table_name;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:50:23