如何相对于组中的值获得行号
Posted
技术标签:
【中文标题】如何相对于组中的值获得行号【英文标题】:How to have row numbers with respect to a value in a group 【发布时间】:2017-07-14 17:43:14 【问题描述】:我的数据如下:
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
每当PageType
是给定member_id
的B 时,我想将值0 分配给这个DesiredColumn
。对于任何 member_id
,在 B 之前的任何 PageType
值都应分配为负值,对于任何 member_id
,在 B 之后的任何 PageType
值都应分配为递增的正值。
我用来获取数据的查询如下:
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 第一次出现的值。
【问题讨论】:
【参考方案1】:计算行号后,您可以得到“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
【讨论】:
我只是对问题稍作改动。 你应该问另一个问题。以上是关于如何相对于组中的值获得行号的主要内容,如果未能解决你的问题,请参考以下文章