我想在值改变时增加行号。 (在Amazon-Redshift中)
我不知道要赋予row_number什么条件。
row_number()超过(按ID,时间戳排序)row_num
id ts value row_number
p051 | ts | 20 | 1
p051 | ts | 20 | 1
p051 | ts | 20 | 1
p051 | ts | 25 | 2
p051 | ts | 20 | 3
p051 | ts | 20 | 3
p051 | ts | 30 | 4
p051 | ts | 30 | 4
谢谢。
答案 0 :(得分:0)
SQL表表示无序集。您的请求似乎假设已在订购,因此我假设有一列包含订购信息,我将假设其为timestamp
。
您可以使用lag()
来获取先前的值,然后获取一个累积的总和:
select t.*,
sum(case when value = prev_value then 0 else 1 end) over (order by id, timestamp)
from (select t.*,
lag(value) over (order by id, timestamp) as prev_value
from t
) t;
请注意,这将使整个数据中的值递增。通常,目的是为每个id
重新编号。在这种情况下,请使用(partition by id order by timestamp)
作为窗口说明。