Я веду журнал взаимодействия пользователей с веб-сайтом, поэтому пока у меня есть строка за посещение, показывающая канал реферала и временную метку:
Я бы хотел ранжировать каждый visit_ref
по дате, чтобы самые последние имели самый высокий ранг, а самые дальние - самый низкий, в пределах диапазона, который я запрашиваю.
Вот мой код с удаленным каналом, чтобы его было легче читать:
SELECT TIMESTAMP_SECONDS(visitStartTime) AS stamp,
customDimension.value AS UserID,
CONCAT(CAST(fullVisitorId AS STRING),CAST(visitId AS STRING)) AS visit_ref,
COUNT(DISTINCT CONCAT(CAST(fullVisitorId AS STRING),CAST(visitId AS STRING))) OVER (PARTITION BY customDimension.value) AS total_visits_in_cycle,
RANK() OVER (PARTITION BY CONCAT(CAST(fullVisitorId AS STRING),CAST(visitId AS STRING)), TIMESTAMP_SECONDS(visitStartTime) ORDER BY TIMESTAMP_SECONDS(visitStartTime)) AS visitrank,
COUNT(DISTINCT transaction.transactionid) AS orders
FROM `xxx.xxx.ga_sessions_20*` AS t
CROSS JOIN UNNEST(hits) AS hits
CROSS JOIN UNNEST(t.customdimensions) AS customDimension
WHERE parse_date('%y%m%d', _table_suffix) between
DATE_sub(current_date(), interval 3 day) and
DATE_sub(current_date(), interval 1 day)
AND customDimension.index = 2
GROUP BY 1,2,3, fullVisitorId, visitid, visitStartTime
ORDER BY UserID
LIMIT 500
В этом примере по рангу всегда возвращается 1
, как видно на скриншоте, как я могу получить ранг уникального visit_ref
по метке времени?
Мой желаемый результат ниже, где visitrank
показывает 1
против самого старого посещения и 3
против самого нового, для этого пользователя:
2 2018-05-07 08:02:30.000 UTC 00008736-01f0-4e0e-8e3b-4dc398e5b6f8 74664051693279955771525680150 3 2 Email - CRM Campaigns 0
3 2018-05-06 21:59:20.000 UTC 00008736-01f0-4e0e-8e3b-4dc398e5b6f8 74664051693279955771525643960 3 1 Email - CRM Campaigns 0
4 2018-05-07 05:39:15.000 UTC 00008736-01f0-4e0e-8e3b-4dc398e5b6f8 74664051693279955771525671555 3 3 Email - CRM Campaigns 0
RANK() OVER (PARTITION BY CONCAT(CAST(fullVisitorId AS STRING),CAST(visitId AS STRING)), TIMESTAMP_SECONDS(visitStartTime) ORDER BY TIMESTAMP_SECONDS(visitStartTime)) AS visitrank,
Я работаю с Google BigQuery StandardSQL.