2016-10-27 5 views
1

У меня небольшая проблема с SQL SELECT. Я хочу, чтобы номер группы непрерывной же значения в столбце NR 2: 1,'a' 2,'a, 3,'b' 4,'c' 5,'a' 6,'a' 7,'e' 8,'e' Нумерация рядов данных в SQL

Выхода я хочу:

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

Можно ли это сделать с помощью всего выбрать? Я должен сделать это в SQL Vertica, не поддерживая операции над переменными в select, поэтому я не могу просто объявить переменную до и немного увеличить ее.

ответ

2

Вы можете использовать CONDITIONAL_CHANGE_EVENT() который довольно просто. В основном вы отправляете в столбце, который вы хотите вызвать приращение последовательности в качестве параметра, и заказываете его так, как вам нужно в окне. Это аналитическая функция Vertica.

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

работает как шарм, очень спасибо –

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 
+0

Отлично работает, очень спасибо. :) –

 Смежные вопросы

  • Нет связанных вопросов^_^