技术求助:如何获取version列子串最大值对应的目标行
嘿,我来帮你解决这个筛选问题!根据你的需求,我们需要从给定的数据集中找出version列里日期子串最大且版本子串也最大的行,下面给你两种常用的实现方案:
解决方案
方法1:使用SQL实现
假设你的数据表名为partner_data,我们可以通过拆分字段、分步计算最大值的方式来筛选目标行:
WITH split_version AS ( SELECT *, TRIM(SUBSTRING_INDEX(version, '|', 1)) AS date_part, TRIM(SUBSTRING_INDEX(version, '|', -1)) AS version_part FROM partner_data ), max_date AS ( SELECT MAX(date_part) AS latest_date FROM split_version ), max_version AS ( SELECT MAX(version_part) AS latest_version FROM split_version WHERE date_part = (SELECT latest_date FROM max_date) ) SELECT * FROM partner_data WHERE TRIM(SUBSTRING_INDEX(version, '|', 1)) = (SELECT latest_date FROM max_date) AND TRIM(SUBSTRING_INDEX(version, '|', -1)) = (SELECT latest_version FROM max_version);
逻辑解释:
- 先用
split_version公共表表达式(CTE)拆分version列,提取出日期和版本部分,并用TRIM去掉前后多余的空格; max_date模块找出所有日期中的最大值(也就是Oct-2018);max_version模块在日期为最大值的行里,进一步筛选出版本部分的最大值(也就是V.6);- 最后通过两个条件匹配,就能精准定位到你需要的目标行。
方法2:使用Python Pandas实现
如果你用Python处理数据集,Pandas会是很方便的工具,代码示例如下:
import pandas as pd # 构造数据集(实际使用时可以替换成pd.read_csv等读取你的数据源) data = { 'partner': ['Alpha']*6, 'region': ['US']*6, 'affiliate': ['USA']*6, 'country': ['USA']*6, 'Revenue': [100, 568, 674, 314, 510, 309], 'version': ['Sep-2018 | V.1', 'Sep-2018 | V.2', 'Sep-2018 | V.6', 'Oct-2018 | V.4', 'Oct-2018 | V.5', 'Oct-2018 | V.6'] } df = pd.DataFrame(data) # 拆分version列,清洗空格 df[['date_part', 'version_part']] = df['version'].str.split('|', expand=True) df['date_part'] = df['date_part'].str.strip() df['version_part'] = df['version_part'].str.strip() # 分步找到最大日期和对应最大版本 latest_date = df['date_part'].max() latest_version = df[df['date_part'] == latest_date]['version_part'].max() # 筛选出目标行 result = df[(df['date_part'] == latest_date) & (df['version_part'] == latest_version)] print(result)
运行后会输出你期望的结果:
partner region affiliate country Revenue version date_part version_part 5 Alpha US USA USA 309 Oct-2018 | V.6 Oct-2018 V.6
内容的提问来源于stack exchange,提问作者Yash
相关产品推荐
相关产品推荐

