Rob*_*rto 5 sql amazon-redshift
我在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)
;
Run Code Online (Sandbox Code Playgroud)
我想用下面的第一个非空值填充缺失的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)
;
Run Code Online (Sandbox Code Playgroud)
在Redshift/Postgres 8.0.2中实现此目的的最佳方法是什么?
我能够解决这个问题的一种方法(利用非空 val2 值是连续的这一事实)如下。但性能很糟糕,因此任何更好的解决方案都将受到欢迎。
SELECT
t1.id
, t1.val1
, COALESCE(t1.val2, MIN(t2.val2)) as val2
FROM test t2 LEFT JOIN test t1 ON t2.id >= t1.id
WHERE t2.val2 IS NOT NULL
AND t1.val1 IS NOT NULL
GROUP BY 1, 2, t1.val2
ORDER BY t1.id
;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3555 次 |
| 最近记录: |