Рассмотрим столбец, который представляет «время между событиями»:Sessionize столбец чисел на группы по 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
(см. this answer), но я не могу понять, как реализовать это в Teradata? Это похоже на то, что я должен иметь возможность ссылаться на тот же OVER(PARTITION BY ...
в рамках одного и того же вызова.
Ломая логику, вот пример в Excel:
Где, B2
имеет формулу: =IF(B1<30, B1+A2, A2)
и замедлен, соответственно. Столбец C
затем проверяет, стоит ли столбец B
> = 30, а столбец D
- это простая запись из столбца B
.
есть ли какой-либо столбец, определяющий заказ? –
Предположим, что «время между» уже в порядке. Но да, на самом деле, вы можете подумать, что будут два дополнительных столбца: 'cust_id' и' event_time'. Таким образом, куча опций «OVER (PARTITION» будет «OVER (PARTITION by cust_id ORDER BY event_time ROWS ...» – JasonAizkalns
@vkp см. Мой комментарий выше для ясности и дайте мне знать, если вы думаете, что его следует добавить к вопросу – JasonAizkalns