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
表达式中。
我有这样的数据集
我有一个名为 '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
表达式中。