将行窗口中的最大值作为所有行的新列获取 [英] Get max value from a window of rows as new column for all rows

查看:13
本文介绍了将行窗口中的最大值作为所有行的新列获取的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

| col 1 | col 2 | col 3 |
|-------|-------|-------|
| 67458 | ADM   | 1008  |
| 67458 | ADM   | 1009  |
| 67458 | SKI   | 1009  |
| 67458 | LIS   | 1010  |
| 67458 | TOU   | 1121  |

如何获取col3Whencol2='ADM'的最大值并将其用作其余记录的值?

预期结果:

| col 1 | col 2 | col 3 | col 4 |
|-------|-------|-------|-------|
| 67458 | ADM   | 1008  | 1009  |
| 67458 | ADM   | 1009  | 1009  |
| 67458 | SKI   | 1009  | 1009  |
| 67458 | LIS   | 1010  | 1009  |
| 67458 | TOU   | 1121  | 1009  |

我知道如何使用子选择和全部来实现这一点。col4将是用于下游联接和内容的伪列。

我尝试了以下操作,但它填充了1121而不是1009

MAX(col3) OVER (PARTITION BY col1 (CASE WHEN col2='ADM' THEN col2 END) ORDER BY col1)

推荐答案

SELECT t.*, max(CASE WHEN col2 = 'ADM' THEN col3 END) OVER (PARTITION BY col1) AS col4
FROM   tbl t;

聚集FILTER子句是在PostgreSQL 9.4中引入的,非常适合于此。但RedShift不是Postgres,Postgres中后来的大多数新增功能在那里都不受支持。比较:

这篇关于将行窗口中的最大值作为所有行的新列获取的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆