以下是我的数据
unic_key rnk fg_new_session
1011854 1 1
1012047 2 0
1012055 3 0
1012056 4 1
1012057 5 0
1018928 6 0
1018932 7 0
825651 56 1
826034 57 0
826048 58 0
我想添加第4列,其中包含前一个unic_key,其中fg_new_session = 1个按顺序排列
输出结果为:
unic_key rnk fg_new_session 4thCol
1011854 1 1 1011854
1012047 2 0 1011854
1012055 3 0 1011854
1012056 4 1 1012056
1012057 5 0 1012056
1018928 6 0 1012056
1018932 7 0 1012056
825651 56 1 825651
826034 57 0 825651
826048 58 0 825651
我想使用分析功能来完成它,但我没有设法做到这一点。 我猜连接是唯一的方法。
答案 0 :(得分:2)
您可以像这样使用窗口函数first_value
和sum
:
select t.*,
first_value(unic_key) over (
partition by grp order by fg_new_session desc,
rnk
) the_new_column
from (
select t.*,
sum(fg_new_session) over (
order by rnk
) grp
from t
) t;
sum
这里用于创建组,然后first_value
来获取组中的第一个值(按照增加排名的顺序,按照order by子句,它将具有max fg_new_session in小组)