我想用 MAX(case when col4='ABC' then col1 else 0 end) OVER (PARTITION BY col2 order by**col3**)
```
col1~col2~col3~col4
30 A B1 ABC
35 A A1 ABC
36 A NULL NULL
40 A X1 ABC
50 B M1 ABD
但是我得到的结果是40,但是我想要35作为我的结果。看起来像
在max aggregate之前未应用order by col3。还有别的办法吗?
我不会写这本书 `row_number()` 在where子句中,当我们试图创建列时,它周围有许多列和复杂的逻辑。
目前我正在尝试它 `Teradata` ,但实际上它将在 `HIVE` .
3条答案
按热度按时间6tdlim6h1#
这太长了,不能发表评论。对于此表达式:
你应该得到:
如果您希望所有人都是“30”,您可以考虑:
5q4ezhmt2#
PARTITION BY
将在distinct上聚合col2
价值观。因此MAX()
三个col2'a'值的值为40。如果要返回“35”。这表明a1是分区中返回的第一行。first_value()可用于返回分区组中的第一行。
xfb7svmp3#
编辑:移动到子查询中的窗口函数以获得正确的行
样本数据(作为表变量)
使用row\ u number()查询以获取要加入的行
结果: