如何在Redshift SQL中为每个ID匹配唯一的最新非空名称
Redshift SQL提取每个ID最新更新的非空name值
需求:现有数据集,每个id对应多条记录,部分name字段为NULL。需通过Redshift SQL提取每个唯一id,并匹配其最新更新的非空name。
原数据集
| id | name | last_updated |
|---|---|---|
| 001 | name1 | 04/01/2022 |
| 001 | name2 | 05/01/2022 |
| 001 | NULL | 06/01/2022 |
| 002 | name3 | 04/01/2022 |
| 002 | name4 | 05/01/2022 |
| 002 | NULL | 06/01/2022 |
期望结果
| id | name | last_updated |
|---|---|---|
| 001 | name2 | 05/01/2022 |
| 002 | name4 | 05/01/2022 |
解决方案
使用窗口函数ROW_NUMBER()实现,先过滤空name记录,再按id分组并按更新时间倒序排名,取每组排名第一的记录:
WITH ranked_non_null_names AS ( SELECT id, name, last_updated, ROW_NUMBER() OVER (PARTITION BY id ORDER BY last_updated DESC) AS rank_num FROM your_table WHERE name IS NOT NULL ) SELECT id, name, last_updated FROM ranked_non_null_names WHERE rank_num = 1;
说明
PARTITION BY id:按id将数据分组ORDER BY last_updated DESC:每组内按更新时间倒序排列,最新记录排首位WHERE name IS NOT NULL:提前过滤空name记录,避免干扰排名逻辑- 筛选
rank_num = 1的结果,即为每个id对应的最新非空name数据
内容的提问来源于stack exchange,提问作者Riccardo Lombardi
相关产品推荐
相关产品推荐

