赋予ID以解决间隙和孤岛问题

时间:2018-11-11 04:54:52

标签: sql azure ssms partition gaps-and-islands

此数据集包含一个有序的时间戳列(System.out.print("Multiplie result: " + Fraction.multiply(num1, denom1, num2, denom2));)和一对标记列(A),它们分别代表“ ”的开始和结束,我要生产的是(B + C)。

我很难向同事解释这个问题,但是从本质上讲,我需要一种给行数不同的块提供D的方法,但是请注意,在第8行作为示例,一个块可以有时只占据一排。

ID

2 个答案:

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

sqlfiddle

结果

|           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;