我有3列acd属性表-id,acd和rpt。首次为acd属性报告rpt时将其设置为1,但是如果重复任何随后的acd属性,则将其设置为0。id列始终在递增(类似于pk)。现在,对于连续零,我需要从2,3 ...开始的序号,如所需的列所示。
id acd rpt wanted
1 a 1 1
2 b 1 1
3 b 0 2
4 a 1 1
5 a 0 2
6 a 0 3
7 d 1 1
8 d 0 2
9 d 0 3
10 c 1 1
11 c 0 2
12 c 0 3
13 c 0 4
14 c 0 5
15 d 1 1
16 a 1 1
我尝试了window函数,但是当我在partition子句中使用“ value”列时,它会将所有a分组,这是不希望的。给定rpt和id递增,是否有可能获得“需要的”列中的结果。
答案 0 :(得分:3)
在QUESTION_MESSAGE
时,您需要PLAIN_MESSAGE
。然后,您需要为每个rpt = 1
枚举1
。如果正确,那么逻辑是:
0
答案 1 :(得分:1)
您需要嵌套的OLAP功能:
SELECT dt.*,
Row_Number() Over (PARTITION BY grp ORDER BY id)
FROM
( -- calculate a group number using a Cumulative Sum over 0/1 (for partitioning in next step)
SELECT prop.*, Sum(rpt) Over (ORDER BY id ROWS Unbounded Preceding) AS grp
FROM prop
) dt