我想计算Bigquery中“首次登录”到“登录”事件之间的小时数。
我有字符串格式的日期,小时和分钟。
我的行数为eventAction ='注册完成'或visitNumber = 1,并使用min()函数查找最早的时间。
毕竟我想计算两小时之间的差异。
我的问题是 - date,hits.hour和hits.minute之间的正确连接是什么 - TIMESTAMP(日期)+ TIMESTAMP(hits.hour)+ TIMESTAMP(hits.minute) - 效果不佳。
我使用此查询:
SELECT
aaa.fullVisitorId,
Signup_time - Reg_time
FROM (
SELECT
fullVisitorId,
MIN(TIMESTAMP(date) + TIMESTAMP(hits.hour) +
TIMESTAMP(hits.minute)) AS Signup_time
FROM TABLE_DATE_RANGE([gapXXX],
DATE_ADD(CURRENT_TIMESTAMP(),-36,'DAY'),
DATE_ADD(CURRENT_TIMESTAMP(),-9,'DAY'))
WHERE eventAction = 'Sign Up Completion'
GROUP BY fullVisitorId ) AS aaa
JOIN (
SELECT
fullVisitorId,
MIN(TIMESTAMP(date) + TIMESTAMP(hits.hour) +
TIMESTAMP(hits.minute)) AS Reg_time
FROM TABLE_DATE_RANGE([gapXXX],
DATE_ADD(CURRENT_TIMESTAMP(),-36,'DAY'),
DATE_ADD(CURRENT_TIMESTAMP(),-9,'DAY'))
WHERE visitNumber = 1
GROUP BY fullVisitorId) AS bbb
ON aaa.fullVisitorId = bbb.fullVisitorId;
答案 0 :(得分:1)
日期,小时和分钟之间的正确连接是什么 - TIMESTAMP(日期)+ TIMESTAMP(hits.hour)+ TIMESTAMP(hits.minute) - 效果不佳?
我建议使用hits.hour
hits.minute
和hits.time
hits.time INTEGER The number of milliseconds after the visitStartTime when this
hit was registered. The first hit has a hits.time of 0
因此(对于BigQuery Standard SQL),您可以将命中开始时间计算为
TIMESTAMP_MILLIS(1000 * visitStartTime + hit.time) AS hitStart
如果您需要继续使用BigQuery Legacy SQL,则可以使用MSEC_TO_TIMESTAMP()
代替TIMESTAMP_MILLIS()
毕竟我想计算两小时之间的差异。
对于标准SQL - 您可以使用TIMESTAMP_DIFF()
作为
TIMESTAMP_DIFF(Timestamp1, Timestamp2, HOUR)
或者对于旧版SQL - 您可以使用
(TIMESTAMP_TO_SEC(Timestamp1) - TIMESTAMP_TO_SEC(Timestamp2))/3600