以字符串格式连接日期,小时和分钟创建日期格式

时间:2017-03-09 13:08:57

标签: date time calendar timestamp google-bigquery

我想计算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;

1 个答案:

答案 0 :(得分:1)

  

日期,小时和分钟之间的正确连接是什么 - TIMESTAMP(日期)+ TIMESTAMP(hits.hour)+ TIMESTAMP(hits.minute) - 效果不佳?

   

我建议使用hits.hour

而不是hits.minutehits.time

来自BigQuery Export Schema

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