BigQuery: определить все попадания, предшествующие транзакции - PullRequest
0 голосов
/ 11 февраля 2019

Предположим, следующий BQ-запрос:

SELECT * FROM (
SELECT CONCAT(CAST(fullVisitorId AS String), CAST(visitId AS STRING)) AS CustVisitId, hits.hitnumber AS HitNr, hits.transaction.transactionRevenue/1000000 AS Rev
FROM
  `[projectid].[dataset].ga_sessions_*` AS t, t.hits AS hits
WHERE
  _TABLE_SUFFIX BETWEEN '20190120' AND '20190120'
ORDER BY HitNr)
WHERE CustVisitId = '49889154628941922861547956449'

Это приводит к следующей таблице:

CustVisitId HitNr   Rev
123456789   1   
123456789   2   
123456789   3   
123456789   4       8
123456789   5   
123456789   6   
123456789   7   
123456789   8   
123456789   9       40
123456789   10  

Теперь я хотел бы добавить столбец ('Новый' внижеприведенный пример), чтобы определить все попадания, предшествующие (и включающие) транзакцию, например:

CustVisitId HitNr   Rev   New
123456789   1             1
123456789   2             1
123456789   3             1
123456789   4       8     1
123456789   5             2
123456789   6             2
123456789   7             2
123456789   8             2
123456789   9       40    2
123456789   10            3

Кто-нибудь знает, как настроить запрос для создания требуемой таблицы?

1 Ответ

0 голосов
/ 11 февраля 2019

Ниже для стандартного SQL BigQuery

#standardSQL
SELECT *,
  1 + (COUNT(Rev) OVER(PARTITION BY CustVisitId ORDER BY HitNr ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)) `New`
FROM (
SELECT CONCAT(CAST(fullVisitorId AS STRING), CAST(visitId AS STRING)) AS CustVisitId, hits.hitnumber AS HitNr, hits.transaction.transactionRevenue/1000000 AS Rev
FROM
  `[projectid].[dataset].ga_sessions_*` AS t, t.hits AS hits
WHERE
  _TABLE_SUFFIX BETWEEN '20190120' AND '20190120'
ORDER BY HitNr)
WHERE CustVisitId = '49889154628941922861547956449'      

Как вы можете видеть, я оставил ваш запрос без изменений и просто добавил одну строку для New

...