Where I have a field called, ‘SALES_CHANGE’ which identifies on which date sales either significantly rose or dropped. I’m interested in creating another field that flags periods between drops and rises. I.e., like this: Where the flag starts when there is a drop and then stops right before the next rise. And then starts again when there’s another drop.
Advertisement
Answer
Teradata supports lag() ignore nulls
. So, your rule is basically that the current row or most recent row with a value is 'DROP'
. For that . . .
select t.*, (case when sale_change = 'DROP' or prev_sale_change = 'DROP' then 'DIP' end) from (select t.*, lag(sale_change ignore nulls) over (order by id_date) as prev_sale_change from t ) t;
You don’t really need the subquery — the lag can be in the outer case
expression.