我相信我有一个非常直截了当的问题,但是通过搜索网站上之前提出的问题无法找到我想要的答案。
我正在尝试向我的数据添加计数器列,例如下面的示例。我希望它能跟踪我数据的特定列中单个值的连续出现。尽管理想情况下,计数器将按组(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
答案 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)
如果你想让它从零开始,只需从中减去一个。