Я относительно новичок в PostgreSQL, и мне сложно выполнить функцию lag() при игнорировании нулевых значений. Согласно документам, http://www.postgresql.org/docs/9.4/static/functions-window.html, невозможно просто передать параметр функции для достижения этого.Функции окна PostgreSQL Игнорировать нулевые значения
Кто-нибудь знает об обходном пути? Вы можете составить любой пример, но если это помогает здесь что-то, чтобы вы начали:
Col_A Col_B Col_A_Lag Col_B_Lag ID Date
VA_1 100 VA_1 100 AA Jan-1
null null VA_1 100 AA Jan-2
null null VA_1 100 AA Jan-3
VA_2 250 VA_2 250 AA Jan-4
VA_2 300 VA_2 300 AA Jan-5
null null VA_2 300 AA Jan-6
Если я вытягивать из tbl_x, вот простой SQL скрипт:
select
Col_A,
Col_B,
case when Col_A is null then lag(Col_A) over w else Col_A end as Col_A_Lag,
case when Col_B is null then lag(Col_B) over w else Col_B end as Col_B_Lag
from tbl_x
window w as (partition by ID order by Date)
Этот сценарий будет не вернуть то, что я хочу, потому что он включает в себя нулевые значения, когда он «оглядывается» в лаг.
Заранее спасибо.
Я ценю ваш ответ, но ваше второе решение не работает при изменении Col_A. Я либо получаю все значения VA_1, либо значения VA_2 в Col_A_Lag в зависимости от того, как я сортирую дату. – bsheehy
А не заметил эту логику. Отредактировал запрос, чтобы включить его. –
Ближе ... все нулевые значения заполняются VA_1 .... последним должен быть VA_2. Благодарю. – bsheehy