Teradata SQL - порядок по дате и пометка строк между двумя событиями - PullRequest
1 голос
/ 01 апреля 2020

У меня есть такой набор данных enter image description here

Где у меня есть поле с именем 'SALES_CHANGE', которое определяет дату, когда продажи значительно выросли или упали. Я заинтересован в создании другого поля, которое помечает периоды между падениями и подъемами. То есть, вот так: enter image description here Где флаг начинается, когда происходит падение, а затем останавливается прямо перед следующим подъемом. И затем начинается снова, когда есть еще одна капля.

1 Ответ

2 голосов
/ 01 апреля 2020

Teradata поддерживает lag() ignore nulls. Итак, ваше правило в основном состоит в том, что текущая строка или самая последняя строка со значением 'DROP'. Для этого . , ,

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;

Вам не нужен подзапрос - задержка может быть во внешнем case выражении.

...