好吧,我到处都找过了,但找不到解决办法。
所以我有一张这样的table:
member_id public_id
a1 NULL
a1 123
a1 345
a2 612
我想添加一个新列,名为 conv
. 使用以下规则填充数字:
IF PREVIOUSROW(member_id) <> member_id THEN 1
ELSE IF PREVIOUSROW(member_id) = member_id AND PREVIOUSROW(public_id) = NULL
THEN PREVIOUSROW(THIS_COLUMN) + 1 <-- here is the inception
ELSE 1
我知道如何访问前一行,我可以使用 LAG()
. 但是,如何从该列访问前一行,这也是使用 LAG()
在里面。
这是我的目标:
member_id public_id conv
a1 NULL 1
a1 NULL 2
a1 NULL 3
a1 123 4
a1 345 1
a2 612 1
谢谢你的帮助!
所以,在我使用了你的解决方案之后,我得到了这样的结果:
member_id public_id conv
a1 NULL 1
a1 NULL 2
a1 NULL 2
a1 123 2
a1 345 1
a2 612 1
因为解决办法是 conv+1
以及 conv
是1,所以最大值总是2
2条答案
按热度按时间whitzsjs1#
lag()接受一个偏移量,以便可以返回多条记录。我不知道您的数据库的确切语法,所以这里是sql server版本。
https://msdn.microsoft.com/en-us/library/hh231256.aspx
hs1ihplo2#
假设你用的是 Impala