【发布时间】:2014-07-01 23:01:22
【问题描述】:
我正在使用 Redshift。给定以下数据:
CREATE TABLE test (
id INT,
val1 INT,
val2 INT
);
INSERT INTO test VALUES
(1, 0, NULL),
(2, 0, NULL),
(3, 13, 1),
(4, 0, NULL),
(5, 0, NULL),
(6, 0, NULL),
(7, 0, NULL),
(8, 21, 2),
(9, 0, NULL),
(10, 143,3)
;
我想用后面的第一个非空值填充缺失的 val2 值,例如
INSERT INTO results VALUES
(1, 0, 1),
(2, 0, 1),
(3, 13, 1),
(4, 0, 2),
(5, 0, 2),
(6, 0, 2),
(7, 0, 2),
(8, 21, 2),
(9, 0, 3),
(10,143,3)
;
在 Redshift/Postgres 8.0.2 中实现此目的的最佳方法是什么?
【问题讨论】:
-
感谢您特别提到您使用的是 Redshift,而不仅仅是“PostgreSQL”。通常的策略是加入
generate_series,但我不知道你在 Redshift 上是否有,而且亚马逊不提供 SQLFiddle 账户,所以我无法真正测试。 -
很遗憾没有 generate_series
-
... 通常的解决方法是使用过程语言(不在 Redshift 上)、窗口函数(不在 Redshift 上)等。
-
@CraigRinger 窗口函数在 redshift 中受支持。无论如何,我希望看到 generate_series() 的解决方案。
标签: sql amazon-redshift