Teradata SQL- 按日期排序并标记两个事件之间的行

Teradata SQL- Order by date and flag rows between two events

我有这样的数据集

我有一个名为 'SALES_CHANGE' 的字段,它标识销售额显着上升或下降的日期。我有兴趣创建另一个标记下降和上升之间的周期的字段。即,像这样: 旗帜在下跌时开始,然后在下一次上涨之前停止。然后在有另一滴时再次开始。

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 表达式中。