oracle-窗口函数中没有分区,但填充了acd属性的序号

时间:2018-11-20 21:35:15

标签: sql oracle

我有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递增,是否有可能获得“需要的”列中的结果。

2 个答案:

答案 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