无法对 Teradata 中的数据集进行排名/行号

问题描述 投票:0回答:1

我在 teradata 表中有一个包含以下字段的数据集

我想排名或行号聚合进一步分析 基于字段:更改时的销售计划。

无法对它们进行适当的排名取决于变化,我尝试了 group by、rank 和 dense rank 但没有产生正确的结果

我得到如下结果集:

但期待的结果

如何得到预期的结果?

teradata rank row-number
1个回答
0
投票

这是一种 gaps & islands 问题,您需要计算一个 0/1 标志,只要 sales_plan 与上一行相比发生变化,该标志就会设置为 1。然后你对这个标志做一个累积和来获得“排名”:

with cte as 
 (
   select ...
      case when sales_plan = lag(sales_plan, 1, sales_plan)
                             over (partition by order_prod_id 
                                   order by sales_date) 
           then 0 
           else 1
      end as flag
   from my_table
)
select ...
   sum(flag) over (partition by order_prod_id 
                   order by sales_date) + 1 as rnk
from cte
© www.soinside.com 2019 - 2024. All rights reserved.