Выборка предыдущих значений по условию в другом столбце?

В таблице имеется большое количество отрицательных значений в перемешку со значениями 0, например:

2015-02-24  -11213.99
2015-02-25          0
2015-06-18  -58832.61
2015-06-19          0
2015-08-18   -55404.6
2015-08-19          0

Каким образом можно выбрать именно значения дат предыдущих 0?

Например, предыдущее значение -11213,99 соответсвенно дата 24.02.2015.

Я попробовал использовать оконную функцию lag:

SELECT lag(test_date, 1) over (partition by test_num order by test_date)
FROM test_table
WHERE test_num = 0;

Однако выводится только выборка именно значений с 0.


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

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

Сделайте так - аналитической функцией LAST_VALUE получите последнее значение столбца с датой, но не учитывая нули в столбце с числом:

select dat old, num, 
    last_value (case when num != 0 then dat end ignore nulls) over (order by dat) new
from t

Результат (на db<>fiddle):

OLD               NUM NEW       
---------- ---------- ----------
2015-02-23  -11800.93 2015-02-23
2015-02-24  -11213.99 2015-02-24
2015-02-25          0 2015-02-24
2015-06-18  -58832.61 2015-06-18
2015-06-19          0 2015-06-18
2015-06-20          0 2015-06-18
2015-08-18   -55404.6 2015-08-18
2015-08-19          0 2015-08-18
→ Ссылка