分配组ID

时间:2017-03-10 06:11:21

标签: sql impala

以下是我的数据

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

我想使用分析功能来完成它,但我没有设法做到这一点。 我猜连接是唯一的方法。

1 个答案:

答案 0 :(得分:2)

您可以像这样使用窗口函数first_valuesum

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小组)