SQL 除以其他字段的移位值

SQL divide by shifted value of other field

我有一个 table 看起来像这样:

其中 RETENTION 是 N_CUSTOMERS 除以 CUSTOMER_WHEN_0 每个 PERIOD_NUMBER。

现在我需要得到另一个新字段,它是将每个 PERIOD_NUMBER 的保留值除以前一个 PERIOUD_NUMBER 的保留值的结果。在图像的示例中,它不被欣赏,但我有 PERIOD_NUMBER 的所有连续值。当PERIOD_NUMBER为0时,除以它的shifter值是NAN还是类似的都没有关系,我稍后会替换它。

所以,总而言之,我想要的输出是一个 ner 字段,显示该行 PERIOD_NUMBER 的 RETENTION 值除以前一个 PERIOD_NUMBER 的 RETENTION 值的结果。我正在使用 DBT,万一有用,我有用于获取这些字段的查询,并且我有在 Python 中执行该过程的代码,但我需要在 SQL[= 中执行12=]

用户首次购买,ORDER_MONTH 是购买日期,PERIOD_NUMBER 是 COHORT 和 ORDER_MONTH 之间的日期差(以月为单位)。 N_CUSTOMERS是每个COHORT中每个PERIOD_NUMBER的客户数,CUSTOMER_WHEN_0是PERIOD_NUMBER为0时每个队列中的用户数。 我不得不使用 window 函数来实现最后一个字段。

这是一个示例,说明如何使用子查询获取先前的 RETENTION,假设期间数字都是连续的:

SELECT
    N_CUSTOMERS,
    PERIOD_NUMBER,
    CUSTOMER_WHEN_0,
    RETENTION,
    (SELECT st_inner.RETENTION
        FROM sourcetable st_inner
        WHERE st_inner.PERIOD_NUMBER = st_outer.PERIOD_NUMBER - 1
    ) as PREVIOUS_RETENTION
FROM sourcetable st_outer

为了便于阅读,我省略了计算,但我认为应该清楚如何计算。