代码之家  ›  专栏  ›  技术社区  ›  John Smith

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

  •  0
  • John Smith  · 技术社区  · 7 年前

    我有一个数据集,我试图在其中生成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

    谢谢你抽出时间

    1 回复  |  直到 7 年前
        1
  •  2
  •   dnoeth    7 年前

    尝试 DENSE_RANK OVER (ORDER BY Shop asc) 相反

    只要没有第二组行具有相同的 shop 价值

    编辑:

    根据您的注释值,可能会重复,因此这也适用于重复的组,但需要嵌套的OLAP函数:

    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