Teradata 数据库
我有一个粗略的去它。我有一个数据集,我想创建一个客户旅程。规则是第一笔交易是一段旅程。至少 30 天后的下一笔交易是旅程。至少在过去 30 天之后的下一次交易也是一个旅程。我无法编程,只能进行常规查询。
有几种情况。客户在数据集中只有 1 笔交易。由于它是唯一的,因此它被标记为旅程。
客户在 5 天内有 2 笔交易。第一个是旅程,第二个不是,因为它是在 30 天内。
客户有 2 笔交易。1/1 和 2/5。它们相隔 > 30 天,因此每个都被标记为旅程。
客户有 3 笔交易。1/1、1/8、2/5。第一个和第三个是旅程,第二个不是(因为它在先前标记的旅程的 30 天窗口内)。
我已经尝试了一切,但似乎总是有一些情况不起作用。
我有我可以写下来的逻辑,但我不知道如何在 teradata 中做到这一点。
- 如果 trans_idx=1 则旅程标志 = y
- 如果日期 - 以前的 trans_idx 日期 > 30 则 Journey_flag = Y
- 这是我能做对的。对于以下逻辑,我无法获得正确的 sql。如果 date - previous trans_idx date < 30 那么我需要累积差异然后对下一行求和。如果它仍然 < 30 我需要累积并总结下一行。一旦超过 30,我需要将该行的旅程标志设置为 Y。
这有效,但它只比较前一行。如果我将其更改为无界,它将查看给定序列的所有行 - 我只需要它返回到前 30 天结束。
WHEN RUNNING_SUM_FLOAT=0 THEN 'Y'
WHEN RUNNING_SUM_FLOAT - MIN(RUNNING_SUM_FLOAT)
OVER (partition by sequence_id ORDER BY trans_idx
ROWS BETWEEN 1 PRECEDING and 1 PRECEDING) >=30
THEN 'Y'
ELSE 'N'
END as journey_flag