作为输入,我有3个字段:
- Column_A:按时间顺序表示调查的步骤
- Column_B:表示参与调查步骤的人数
- Column_C:表示在此特定调查步骤中成功完成的人数(B&>;=C)
现在我需要计算一个新的COLUMN_D:此列需要表示参与者的总数,这些参与者在前面的所有步骤之后仍保持成功.因此,这个数字充其量只能保持不变或在每个步骤之后在参与者不成功的情况下减少.
在Excel中,这很容易,因为我会在那里计算(第1行除外): 前一行的Value_D-(Value_B-Value_C).
我知道SQL中的滞后和领先,但我如何才能考虑同一列的前一行的计算?它以某种方式起作用了吗?我需要编写递归CTE之类的代码吗?
我认为最大的问题是:行数(Column_A)不一样,所以我不能只把几个CTE粘在一起.
Column_A | Column_B | Column_C | Column_D |
---|---|---|---|
0 | 35 | 35 | 35 |
1 | 35 | 35 | 35 |
2 | 35 | 34 | 34 |
3 | 34 | 33 | 33 |
4 | 33 | 30 | 30 |
5 | 33 | 31 | 28 |
6 | 33 | 33 | 28 |
我try 了下面的方法,但显然它返回了错误的结果,因为它没有考虑到前面的计算.
SELECT [Column_A]
,[Column_B]
,[Column_C]
, CASE WHEN [Column_A] = 0
THEN [Column_B]
ELSE LAG([Column_C], 1, 0) OVER (PARTITION BY 1
ORDER BY [Column_A] ASC) - ([Column_B] - [Column_C])
END AS [Column_D]
FROM dataset