将具有空值或缺少值的第一行和最后一行替换为Postgresql12中的上一个/下一个可用值

问题描述 投票:0回答:1

我是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 rowPrevious available value

有人可以引导我朝正确的方向解决这个问题吗?谢谢

sql database postgresql rdbms
1个回答
0
投票

[不幸的是,Postgres在ignore nulllead()上没有lag() s选项。在您的示例中,您只需要从下一行借用。因此:

select t.*,
       coalesce(value, lag(value) over (order by id), lead(value) over (order by id)) as expected
from t;
© www.soinside.com 2019 - 2024. All rights reserved.