此数据集包含一个有序的时间戳列(System.out.print("Multiplie result: " + Fraction.multiply(num1, denom1, num2, denom2));
)和一对标记列(A
),它们分别代表“ 块”的开始和结束,我要生产的是(B + C
)。
我很难向同事解释这个问题,但是从本质上讲,我需要一种给行数不同的块提供D
的方法,但是请注意,在第8行作为示例,一个块可以有时只占据一排。
ID
答案 0 :(得分:0)
您可以尝试在子查询中使用LAG
窗口函数,然后将SUM
窗口函数与条件汇总函数一起使用。
SELECT A,B,C,SUM(CASE WHEN preC = 1 THEN 1 ELSE 0 END) OVER(ORDER BY A,preC) +1 'D'
FROM (
SELECT *,
LAG(C,1,C) OVER(ORDER BY A) preC
FROM T
) t1
结果
| A | B | C | D |
-----------------------------------------
| 06/10/2018 13:17:40 | 1 | 0 | 1 |
| 06/10/2018 13:17:56 | 0 | 0 | 1 |
| 06/10/2018 13:18:08 | 0 | 1 | 1 |
| 06/10/2018 13:18:21 | 1 | 0 | 2 |
| 06/10/2018 13:18:26 | 0 | 0 | 2 |
| 06/10/2018 13:18:26 | 0 | 0 | 2 |
| 06/10/2018 13:18:28 | 0 | 1 | 2 |
| 06/10/2018 13:18:28 | 1 | 1 | 3 |
| 06/10/2018 13:18:31 | 1 | 0 | 4 |
| 06/10/2018 19:49:26 | 0 | 0 | 4 |
| 06/10/2018 19:50:24 | 0 | 1 | 4 |
答案 1 :(得分:0)
我看不到C
与该问题有什么关系。这只是B
上的累计金额:
select a, b, c,
sum(b) over (order by a) as d
from t;