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

Add Counter Column for Contiguous Run of Equal Value

我想我有一个非常简单的问题,但无法通过搜索网站上以前提出的问题找到我正在寻找的答案。

我正在尝试向我的数据添加一个计数器列,如下例所示。我希望它跟踪我数据的特定列中单个值的连续出现。尽管理想情况下,计数器将按组 (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

您只需使用 row_number 函数即可。

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

如果您希望它从零开始,只需从中减一即可。

它比简单的 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