0

Teradata 数据库

我有一个粗略的去它。我有一个数据集,我想创建一个客户旅程。规则是第一笔交易是一段旅程。至少 30 天后的下一笔交易是旅程。至少在过去 30 天之后的下一次交易也是一个旅程。我无法编程,只能进行常规查询。

有几种情况。客户在数据集中只有 1 笔交易。由于它是唯一的,因此它被标记为旅程。

客户在 5 天内有 2 笔交易。第一个是旅程,第二个不是,因为它是在 30 天内。

客户有 2 笔交易。1/1 和 2/5。它们相隔 > 30 天,因此每个都被标记为旅程。

客户有 3 笔交易。1/1、1/8、2/5。第一个和第三个是旅程,第二个不是(因为它在先前标记的旅程的 30 天窗口内)。

我已经尝试了一切,但似乎总是有一些情况不起作用。

我有我可以写下来的逻辑,但我不知道如何在 teradata 中做到这一点。

  1. 如果 trans_idx=1 则旅程标志 = y
  2. 如果日期 - 以前的 trans_idx 日期 > 30 则 Journey_flag = Y
  3. 这是我能做对的。对于以下逻辑,我无法获得正确的 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
4

0 回答 0