考虑一个类似以下数据的表格:
然而,以上方法无法处理任意数量连续的
column_a (boolean) | column_order (integer)
TRUE | 1
NULL | 2
NULL | 3
TRUE | 4
NULL | 5
FALSE | 6
NULL | 7
我想编写一个查询,将column_a
中的每个NULL
值替换为该列按照column_order
指定的顺序前面的值中最后一个非NULL
值。结果应如下所示:
column_a (boolean) | column_order (integer)
TRUE | 1
TRUE | 2
TRUE | 3
TRUE | 4
TRUE | 5
FALSE | 6
FALSE | 7
为简单起见,我们可以假设第一个值永远不为空。如果没有超过一个连续的NULL
值,则以下方法可行:
SELECT
COALESCE(column_a, lag(column_a) OVER (ORDER BY column_order))
FROM test_table
ORDER BY column_order;
然而,以上方法无法处理任意数量连续的
NULL
值。有没有一种适用于Postgres的查询语句能够实现以上结果?是否有一种高效的查询语句能够很好地扩展到大量行数据?