【问题标题】:SQL divide by shifted value of other fieldSQL除以其他字段的移位值
【发布时间】:2021-09-21 02:18:01
【问题描述】:

我有一张如下所示的表格:

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

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

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

用户的首次购买,ORDER_MONTH 是购买日期,PERIOD_NUMBER 是 COHORT 和 ORDER_MONTH 之间的日期差(以月为单位)。 N_CUSTOMERS 是每个 COHORT 中每个 PERIOD_NUMBER 的客户数,CUSTOMER_WHEN_0 是当 PERIOD_NUMBER 为 0 时每个群组的用户数。 我必须使用窗口函数才能获得最后一个字段。

【问题讨论】:

  • 您的样本数据中没有显示同类群组,这使得这个问题很难理解。
  • @Gordon Linoff 感谢您的回答,我省略了它,因为它只是一个概念性的声明,但数据已经按群组分组,因此没有必要考虑它。抱歉,如果这让您难以理解

标签: sql shift dbt


【解决方案1】:

这是一个示例,说明如何使用子查询获取上一个 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

为了可读性,我省略了计算,但我认为应该清楚如何做到这一点。

【讨论】:

  • 非常感谢尼尔,感谢这个问题我已经能够解决它,真的很有帮助!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 2011-05-15
  • 2019-06-28
  • 2020-02-22
  • 2022-01-11
  • 1970-01-01
相关资源
最近更新 更多