Как я могу сбросить промежуточный итог в SQL BigQuery после выполнения условия в другом столбце? - PullRequest
0 голосов
/ 16 апреля 2019

В BigQuery у меня есть набор данных из Google Analytics для уровня попадания, содержащий, среди прочего: date, fullVisitorId, visitId, transactionRevenue и pageHome (независимо от того, является ли страница кем-тона домашней странице или нет).Для каждого посетителя я хочу вычислить итоговую сумму pageHome , пока не будет сделана транзакция .Если сделка сделана, то transactionRevenue - это число, в противном случае - ноль.Для примера, пожалуйста, см. Прикрепленное изображение.

Пример таблицы с итоговой суммой

Я пробовал сумму по разделу на 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 Ответ

1 голос
/ 16 апреля 2019

Для каждого посетителя я хочу вычислить итоговую сумму 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
...