Разбейте столбец чисел на группы по 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
.