为等值的连续 运行 添加计数器列
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
我想我有一个非常简单的问题,但无法通过搜索网站上以前提出的问题找到我正在寻找的答案。
我正在尝试向我的数据添加一个计数器列,如下例所示。我希望它跟踪我数据的特定列中单个值的连续出现。尽管理想情况下,计数器将按组 (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