我想在值更改时增加行号

时间:2019-05-02 00:33:03

标签: sql amazon-redshift

我想在值改变时增加行号。 (在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

谢谢。

1 个答案:

答案 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)作为窗口说明。