Teradata 基于前一行创建日期范围窗口

时间:2021-02-12 04:17:44

标签: sequence teradatasql

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,则 travel_flag = Y
  3. 这是我能做到的。我无法为以下逻辑获取正确的 sql。如果日期 - 前一个 trans_idx 日期 < 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

0 个答案:

没有答案
相关问题