如何优化Redshift查询,将数据合并为单行并去除空值?
调整Amazon Redshift查询以合并结果为单行并去除空值
现有如下Amazon Redshift查询语句:
select distinct id_butaca, max(CASE WHEN id_tipoorden = 1 THEN fechahoracompra ELSE NULL END) over (partition by id_butaca,id_tipoorden ) as max_fecha_compra, max(CASE WHEN id_tipoorden = 4 THEN fechahoracompra ELSE NULL END) over (partition by id_butaca,id_tipoorden ) as max_fecha_devo from dw_fact_table where id_butaca = 175044501
该查询返回两行带空值的数据,现需修改查询,去除空值并将数据合并为单行,预期结果格式如下:
id_butaca, max_fecha_compra, max_fecha_devo 175044501 2023-01-09 12:11:04.0 2023-01-09 12:09:55
修改后的查询语句
select id_butaca, max(CASE WHEN id_tipoorden = 1 THEN fechahoracompra ELSE NULL END) as max_fecha_compra, max(CASE WHEN id_tipoorden = 4 THEN fechahoracompra ELSE NULL END) as max_fecha_devo from dw_fact_table where id_butaca = 175044501 group by id_butaca;
调整说明
- 原查询使用窗口函数时,按
id_butaca和id_tipoorden双字段分区,导致同id_butaca下不同id_tipoorden的数据生成两行结果,每行仅填充对应类型的日期字段,另一字段为空。 - 修改后移除窗口函数,改用
group by id_butaca将同id_butaca的所有数据聚合为一行,max()聚合函数会自动忽略空值,提取对应id_tipoorden下的最大日期值,最终得到无空值的单行结果。
内容的提问来源于stack exchange,提问作者pm1359
相关产品推荐
相关产品推荐

