我对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中的变量操作,所以我不能在之前声明变量并以某种方式递增它。
答案 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