Выборка предыдущих значений по условию в другом столбце?
В таблице имеется большое количество отрицательных значений в перемешку со значениями 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