在SQL中编号数据系列

时间:2016-10-27 12:13:10

标签: sql vertica

我对SQL SELECT有一点问题。我想在第nr 2列中为相同值的连续组编号: 1,'a' 2,'a, 3,'b' 4,'c' 5,'a' 6,'a' 7,'e' 8,'e'

我想要的输出:

1,'a',1 2,'a,,1 3,'b',2 4,'c',3 5,'a',4 6,'a',4 7,'e',5 8,'e',5

是否可以只选择一个?我必须在Vertica的SQL中执行它,它不支持select中的变量操作,所以我不能在之前声明变量并以某种方式递增它。

2 个答案:

答案 0 :(得分:3)

您可以使用CONDITIONAL_CHANGE_EVENT()这非常简单。基本上,您要将要触发序列增量的列作为参数发送,然后在窗口中按照需要的方式对其进行排序。它是Vertica分析函数。

SELECT col1, 
       col2,
       CONDITIONAL_CHANGE_EVENT(col2) OVER ( ORDER BY col1 )
FROM mytable

答案 1 :(得分:2)

您可以使用窗口功能执行此操作。一种方法使用lag(),然后执行值更改时的累积总和:

select t.col1, t.col2,
       sum(case when col2 = prev_col2 then 0 else 1 end) over (order by col1) as newcol
from (select t.*,
             lag(col2) over (order by col1) as prev_col2
      from t
     ) t