SQL 中的数据编号系列

Numbering series of data in SQL

我对 SQL SELECT 有点问题。我想在第 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

是否可以仅使用 select 来完成?我必须在 Vertica 的 SQL 中执行此操作,它不支持对 select 中的变量进行操作,因此我不能仅在之前声明一个变量并以某种方式递增它。

您可以使用 window 函数来做到这一点。一种方法使用 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

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

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