【问题标题】:Create date format from concatenating date, hour and minute in string format从字符串格式的连接日期、小时和分钟创建日期格式
【发布时间】:2017-03-09 13:08:56
【问题描述】:

我想计算 Bigquery 中“首次登录”到事件“登录”之间的小时数。

我有字符串格式的日期、小时和分钟。

我有 eventAction = 'Sign Up Completion' 或 visitNumber = 1 的行数,并使用 min() 函数查找最早时间。

毕竟我想以小时为单位计算两次之间的差异。

我的问题是 - 日期、hits.hour 和 hits.minute 之间的正确连接是什么 - TIMESTAMP(date) + 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;

【问题讨论】:

    标签: date time calendar timestamp google-bigquery


    【解决方案1】:

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

    我建议不要使用hits.hourhits.minute,而是使用hits.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 标准 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
    

    【讨论】:

    • 谢谢 Mikhail,但 hits.hour 和 hits.minute 是我数据中的字段名称。我没有一个日期、小时、分钟和秒组合的字段,只有 3 个字符串格式的字段...
    • @Raya - 你的表是谷歌分析数据吗?那是我的假设。如果是GA数据-请再次阅读我的答案!如果不是 - 请告诉我们 - 这样就不会有混淆
    • 我们有 GA360,我使用 BigQuery 处理我们在 Google Analytics 中保存和显示的所有数据。它回答了你的问题吗?
    • @Raya - 所以你没有在你的表模式中看到 hits.time 字段?请确认!这就是您基于support.google.com/analytics/answer/3437719 所期望的
    • 我的架构中有 hits.time,但这个数字在每次会话开始时被重置(开始为零)。而且我知道我的用户并不总是在他们第一次登录时在同一个会话中“注册”。
    猜你喜欢
    • 1970-01-01
    • 2022-01-13
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    相关资源
    最近更新 更多