分配组 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_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
得到组中的第一个值(按照rank递增的顺序,按照order by子句,会有max fg_new_session 入群)
这是我的数据
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_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
得到组中的第一个值(按照rank递增的顺序,按照order by子句,会有max fg_new_session 入群)