Разбейте столбец чисел на группы по 30 человек после достижения порога в Teradata.

Рассмотрим столбец, который представляет «время между событиями»:

(5, 40, 3, 6, 0, 9, 0, 4, 5, 18, 2, 4, 3, 2)

Я хотел бы сгруппировать их в группы по 30, но группы, которые сбрасываются. Желаемый результат:

(0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2)

Это потому, что, когда мы достигаем кумулятивного 30, мы «сбрасываем» и снова начинаем считать. Итак, 5 + 40> 30, мы падаем до нуля и начинаем кумулятивное сложение, пока не достигнем 30 ... (3 + 6 + 0 ...), что происходит, когда мы достигаем 10-го элемента == 18.

Это может быть реализовано черезReduce функция (см.этот ответ) но я не могу понять, как реализовать это в Teradata? Как будто я должен иметь возможность ссылаться на то жеOVER(PARTITION BY ... в течение одного звонка.

Разбиваем логику, вот пример в Excel:

Куда,B2 имеет формулу:=IF(B1<30, B1+A2, A2) и тянет вниз соответственно. колонкаC затем проверяет, если столбецB is> = 30 и столбецD это простая сумма столбцаB.

Ответы на вопрос(1)

Ваш ответ на вопрос