我的数据如下:
Pagetype member_id created_at rownum
A 2 date 1
B 2 date 2
C 2 date 3
D 4 date 1
B 4 date 2
R 4 date 3
B 13 date 1
S 13 date 2
B 13 date 3
我想在下面添加另一栏:
Pagetype member_id created_at rownum DesiredRownum
A 2 date 1 -1
B 2 date 2 0
C 2 date 3 1
D 4 date 1 -1
B 4 date 2 0
R 4 date 3 1
B 13 date 1 0
S 13 date 2 1
B 13 date 3 2
对于给定的DesiredColumn
,只要PageType
为B,我就想将值0分配给此member_id
。对于任何PageType
,在B之前member_id
的任何值都应分配为负值,并且对于任何PageType
,在B之后的任何member_id
值应该被设为增加正值。
我用来获取数据的查询如下:
select pagetype,
member_id,
created_at,
row_number() over(partition by member_id order by created_at)
from table
order by member_id,
created_at
如何将此新列添加到我的数据中?
编辑:略有变化。 PageType
可以为任何给定用户重复。例如,PageType
B重复member_id
13.在这种情况下,我们希望计算第一次出现B时的值。
答案 0 :(得分:3)
计算行号后,您可以获得" B"的值。并将其用于计算:
select t.*,
(seqnum -
max(case when pagetype = 'B' then seqnum end) over (partition by member_id)
) as b_diff
from (select pagetype, member_id, created_at,
row_number() over (partition by member_id order by created_at) as seqnum
from table
) t
order by member_id, created_at