redshift 创建一个基于其他列的值的字段

问题描述

我需要根据第二列的值创建一个标志字段。

ID1     ID2     FLAG
1       19      1
1       37      1
2       19      2
2       37      2
2       98      1
3       19      1
4       37      1
5       19      1
5       37      1
6       37      2
6       98      1

即当 ID2 为 98 时,标志为 1 否则当他们在 19、37 然后是 1 但是当 ID1 具有所有 ID2 时,则 98 获得优先级,就像上面示例中的 ID1 = 2 一样。

到目前为止,我正在尝试分组,获取 max() 然后设置值。 我尝试了 RANK() 方法,但 19、37 的排名应该相同,但我不确定如何做到这一点。

提前致谢..

解决方法

如果我理解正确,你想要dense_rank()

select t.*,dense_rank() over (partition by id1
                          order by (id2 = 98) desc
                         ) as flag
from t;