满足其他列中的条件后,如何在 SQL BigQuery 中重置运行总计?

Posted

技术标签:

【中文标题】满足其他列中的条件后,如何在 SQL BigQuery 中重置运行总计?【英文标题】:How can I reset running total in SQL BigQuery after condition in other column is met? 【发布时间】:2019-04-16 11:16:10 【问题描述】:

在 BigQuery 中,我有一个来自 Google Analytics 的命中级别数据集,其中包括:datefullVisitorIdvisitIdtransactionRevenuepageHome(无论某人是否是该页面on 是否为主页)。对于每个访问者,我想计算pageHome 直到进行交易的总和。如果进行了交易,则transactionRevenue 为数字,否则为空。示例见附图。

Example table running total

我尝试通过fullVisitorId 对分区进行求和,并通过visitId 进行排序。但是,当transactionId 不为空时,我不确定如何重置。

SELECT
    date,
    fullVisitorId,
    visitId,
    visitNumber,
    transactionRevenue,
    pageHome,
    SUM(pageHome) OVER(PARTITION BY fullVisitorId ORDER BY visitId ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS sumpageHome

此代码计算每个访问者的累计总数,但在交易完成后它尚未重置。

【问题讨论】:

【参考方案1】:

对于每个访问者,我想计算 pageHome 的运行总数,直到进行交易。

使用子查询计算交易编号。然后在累积总和中使用它:

SELECT SUM(pageHome) OVER (PARTITION BY fullVisitorId,  transaction_count ORDER BY DATE) as running_pageHome
FROM (SELECT t.*,
             COUNT(TransactionRevenue) OVER (PARTITION BY fullVisitorId ORDER BY DATE) as transaction_count
      FROM t
     ) t

【讨论】:

谢谢,几乎可以了!但是,没有交易的访问会被添加到之前的交易中。知道如何解决这个问题吗?

以上是关于满足其他列中的条件后,如何在 SQL BigQuery 中重置运行总计?的主要内容,如果未能解决你的问题,请参考以下文章

在另一列满足条件后计算一列中的值

创建一个新列,它是满足两个条件的多个其他列中的日期数之和

sql 查询同时满足一列中两个条件的记录

在其他列中选择满足多个条件的列值

根据其他列中的条件更新一列中的值

如果满足某些条件,则从行中获取信息