为等值的连续运行添加计数器列

时间:2017-03-07 17:38:33

标签: sql teradata

我相信我有一个非常直截了当的问题,但是通过搜索网站上之前提出的问题无法找到我想要的答案。

我正在尝试向我的数据添加计数器列,例如下面的示例。我希望它能跟踪我数据的特定列中单个值的连续出现。尽管理想情况下,计数器将按组(ID#)运行,但这并非完全必要,因为两个ID之间连续重复值的几率基本为0.

    # ID Date   Value  Consecutive_Repeat
    # 1  01-01    a       0
    # 1  01-02    b       0
    # 1  01-03    b       1
    # 1  01-04    a       0
    # 2  01-01    x       0
    # 2  01-02    x       1
    # 2  01-03    x       2
    # 2  01-04    a       0   
    # 3  01-01    b       0
    # 3  01-02    b       1
    # 3  01-03    a       0
    # 3  01-04    b       0
    # 4  01-01    c       0
    # 4  01-02    c       1
    # 4  01-03    c       2
    # 4  01-04    c       3

2 个答案:

答案 0 :(得分:2)

它比简单的ROW_NUMBER复杂一点,您可以将Teradata扩展应用于标准SQL,RESET WHEN

Row_Number() 
Over (PARTITION BY id 
      ORDER BY date
      RESET WHEN Min(value) -- start whenever there's a a new value
                 Over (PARTITION BY id
                       ORDER BY date
                       ROWS BETWEEN 1 Preceding AND 1 Preceding) <> value) -1

答案 1 :(得分:0)

您只需使用row_number功能。

ROW_NUMBER() over (partition by id,value order by date)

如果你想让它从零开始,只需从中减去一个。