如何基于分组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_IDMAX(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
相关产品推荐
相关产品推荐

