我是Postgresql的新手。我想用下一个/上一个可用值替换具有空值或缺失值的表T的第一行和最后一行。另外,如果中间缺少值,则应将其替换为以前的可用值。例如:
id value EXPECTED
1 1
2 1 1
3 2 2
4 2
5 3 3
6 3
我知道有很多类似的线程,但是似乎没有一个解决这个问题的地方,开始和结尾也缺少值(包括中间行中的一些值)。另外,作为新手,很难理解诸如first_row,part by by,top 1(不适用于postgres)之类的概念。
到目前为止,我已经提到了以下线程:value from previous row和Previous available value
有人可以引导我朝正确的方向解决这个问题吗?谢谢
[不幸的是,Postgres在ignore null
和lead()
上没有lag()
s选项。在您的示例中,您只需要从下一行借用。因此:
select t.*,
coalesce(value, lag(value) over (order by id), lead(value) over (order by id)) as expected
from t;