分配组 ID

Assign a group ID

这是我的数据

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 order by rnk

输出将是:

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

我想用解析函数来做,但是没做成。 我想加入是唯一的方法。

您可以像这样使用 window 函数 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得到组中的第一个值(按照rank递增的顺序,按照order by子句,会有max fg_new_session 入群)