SQL技术问询:如何用CASE语句获取每个Id最大年份对应Country_Code
用CASE语句实现SQL中最大年份对应国家代码的匹配
完整解决方案代码
SELECT DISTINCT id, CASE -- 判断当前行的End_Year是否等于该Id的最大年份 WHEN end_year = MAX(CASE WHEN end_year >= complete_year THEN end_year ELSE complete_year END) OVER (PARTITION BY id) THEN country_code -- 否则判断Complete_Year是否等于最大年份 WHEN complete_year = MAX(CASE WHEN end_year >= complete_year THEN end_year ELSE complete_year END) OVER (PARTITION BY id) THEN country_code END AS final_country_code, MAX(CASE WHEN end_year >= complete_year THEN end_year ELSE complete_year END) OVER (PARTITION BY id) AS final_year FROM sample_table;
逻辑说明
- 计算全局最大年份:和你已实现的逻辑一致,通过窗口函数
OVER (PARTITION BY id),对每个Id从End_Year和Complete_Year中提取最大值,得到final_year。 - 匹配对应国家代码:用CASE语句逐一校验当前行的
End_Year或Complete_Year是否等于该Id的final_year,匹配成功则取当前行的Country_Code。 - 去重得到唯一结果:由于每个Id对应多行数据,用
DISTINCT过滤重复行,最终得到每个Id唯一的结果行。
验证结果
针对你提供的表结构,运行上述代码后会生成期望输出:
| Id | Final_Country_Code | Final_Year |
|---|---|---|
| 101 | USA | 2023 |
| 102 | CAN | 2026 |
内容的提问来源于stack exchange,提问作者Jay Lorenz Dungog
相关产品推荐
相关产品推荐

