teradata 根据组中有事件的组对事件数据进行排名

teradata rank event data based on group where group has events

我有一个数据集,我正在尝试在 teradata 中生成序列号 在下面的数据集中,订单 (550) 在商店中进行了多次修改(总共 10 次) 最后一列 ShopSequence 是我想要实现的,当订单移动到不同的商店时,ShopSequence 数字递增 1 因此,该数据集读取为在 4 家商店中进行了 10 次修改 有很多这样的订单

Order,   Shop,  SequenceNumber,     ShopSequence            
550,     AA,      1                 1
550,     AA,      2                 1
550,     AA,      3                 1

550,     BB,      4                 2
550,     BB,      5                 2
550,     BB,      6                 2
550,     BB,      7                 2

650,     CC,      8                 3
650,     CC,      9                 3
650,     CC,      10                3

我尝试了许多 OLAP 配置,但不幸的是我无法让它工作

ROW_NUMBER() OVER (ORDER BY SequenceNumber asc, Shop asc) AS shop_row_number, RANK() OVER (PARTITION BY Shop asc ORDER BY SequenceNumber ASC

感谢您的宝贵时间

试试 DENSE_RANK OVER (ORDER BY Shop asc)

只要不存在具有相同 shop 值的第二组行,此方法就有效。

编辑:

根据您的评论值可能会重复,因此这也适用于重复的组,但需要嵌套 OLAP-functions:

select ...
   sum(flag) -- calculate the rank
   over (partition by Order 
         order by SequenceNumber
         rows unbounded preceding) as ShopSequence
from
 (
   select ...
       -- flag the rows where a new group starts
       -- 'min...' can be replaced by LAG in TD16.10+
      case when min(Shop)
                over (partition by Order 
                      order by SequenceNumber
                      rows between 1 preceding and 1 preceding) = Shop
         then 0 
         else 1
    end as flag
 ) as dt