Redshift查询优化需求:新增Yes/No列判定多进程符合条件情况
Redshift查询实现:新增Yes/No判断列
可以通过子查询+聚合统计+条件判断的方式实现需求,具体步骤和SQL如下:
实现思路
- 先定位数据集里的最新日期
- 针对最新日期的数据,按
name分组,统计每个name下满足value IN ('L1','L2')的不同process数量 - 根据统计数量是否≥2,输出
Yes或No
具体SQL代码
写法一:子查询获取最新日期
SELECT name, CASE WHEN COUNT(DISTINCT process) >= 2 THEN 'Yes' ELSE 'No' END AS has_multiple_qualified_process FROM your_table_name WHERE date = (SELECT MAX(date) FROM your_table_name) AND value IN ('L1', 'L2') GROUP BY name
写法二:窗口函数标记最新日期(适合保留更多字段的场景)
如果需要保留原表的process、value等字段,可以用窗口函数先标记最新日期数据,再统计判断:
WITH latest_data AS ( SELECT *, MAX(date) OVER () AS max_date FROM your_table_name ), name_process_count AS ( SELECT name, COUNT(DISTINCT process) OVER (PARTITION BY name) AS qualified_process_count FROM latest_data WHERE date = max_date AND value IN ('L1', 'L2') ) SELECT DISTINCT name, CASE WHEN qualified_process_count >= 2 THEN 'Yes' ELSE 'No' END AS has_multiple_qualified_process FROM name_process_count
关键说明
- 使用
COUNT(DISTINCT process)是为了避免同一个process对应多条L1/L2记录时重复计数,确保统计的是不同process的数量 - 如果需要将判断列与原表全量数据关联,可将上述统计结果作为子查询,通过
name字段关联回原表
内容的提问来源于stack exchange,提问作者Fe.
相关产品推荐
相关产品推荐

