【发布时间】:2018-05-04 14:28:31
【问题描述】:
以下是我试图在 Redshift 数据库中实现的示例。
我有一个变量current_value,我想创建一个新列value_desired,即:
- 如果上一行为空,则与
current_value相同 - 如果前一行非空,则等于前一个非空值
这听起来很容易,但我还没有找到方法。
row_numb current_value value_desired
1
2
3 47 47
4
5 45 45
6
7
8 42 42
9 41 42
10 40 42
11 39 42
12 38 42
13
14 36 36
15
16
17 33 33
18 32 33
我已尝试使用 LAG() 函数,但我只能获取前一个值(不是“非空”块中的第一个值),这是我的看法:
SELECT *
, CASE WHEN current_value is not null and LAG(current_value) is null THEN current_value
WHEN current_value is not null and LAG(current_value) is not null
THEN LAG(current_value)
ELSE NULL END AS value_desired
FROM test1
非常感谢任何帮助,谢谢。
【问题讨论】:
-
见coalesce函数。
-
请您将问题更新为“自上一个空值以来获得第一个非空值的延迟)
标签: sql amazon-redshift lag window-functions