Заполнить предыдущим положительным значением если текущее пустое sql

У меня есть таблица, в которой заполняются числовые данные в следующем порядке:

Это имя поля
1
2
0
0
0
3
0
4
0
0
0
5

Подскажите пожалуйста, как средствами sql заполнить нулевые значения предыдущим положительным числом?

Т.е. мне нужно привести поле к следующему виду:

Это имя поля
1
2
2
2
2
3
3
4
4
4
4
5

Спасибо!


Ответы (1 шт):

Автор решения: 0xdb

На приведённых в вопросе данных -- никак, задача нерешаема.

в которой заполняются числовые данные в следующем порядке

Порядок, в котором данные заполняются, не играет в дальнейшем никакой роли, он теряется. То есть, сегодня он [1, 2, 0...], а завтра - [5, 1, 0...].

Поэтому, чтобы решить задачу, требуется как минимум ещё один столбец для сортировки.

В примере ниже добавлен столбец id, по которому будет идти сортировка:

with t (id, val) as (
    select rownum, to_number (column_value)
    from xmlTable ('1, 2, 0, 0, 0, 3, 0, 4, 0, 0, 0, 5')
    ) -- это тестовые данные для запроса ниже
 
select id, val oldval,
    last_value (case 
                when val>0 then val 
                end ignore nulls) over (order by id) newval 
from t

Теперь можно получить ожидаемый результат:

        ID     OLDVAL     NEWVAL
---------- ---------- ----------
         1          1          1
         2          2          2
         3          0          2
         4          0          2
         5          0          2
         6          3          3
         7          0          3
         8          4          4
         9          0          4
        10          0          4
        11          0          4
        12          5          5
→ Ссылка