У меня есть таблица в 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)
Я уже могу сделать это с подзапросом в select, но в моих реальных данных у меня есть 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)