redshift 根据其他列创建一个具有值的字段
redshift create a field with value based on other column
我需要根据第二列的值创建一个标志字段。
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;
我需要根据第二列的值创建一个标志字段。
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;