我在 Postgres 中有一个如下所示的表:
# select * from p;
id | value
----+-------
1 | 100
2 |
3 |
4 |
5 |
6 |
7 |
8 | 200
9 |
(9 rows)
我想查询使它看起来像这样:
# select * from p;
id | value | new_value
----+-------+----------
1 | 100 |
2 | | 100
3 | | 100
4 | | 100
5 | | 100
6 | | 100
7 | | 100
8 | 200 | 100
9 | | 200
(9 rows)
我已经可以在选择中使用子查询来做到这一点,但是在我的真实数据中,我有 20k 或更多行,而且速度很慢。
这可以在窗口函数中完成吗?我很想使用 lag(),但它似乎不支持IGNORE NULLS选项。
select id, value, lag(value, 1) over (order by id) as new_value from p;
id | value | new_value
----+-------+-----------
1 | 100 |
2 | | 100
3 | |
4 | |
5 | |
6 | |
7 | |
8 | 200 |
9 | | 200
(9 rows)