2017-03-09 89 views
1

我想計算在「第一次登錄」到BigQuery中的事件「登錄」之間的小時數。以字符串格式連接日期,小時和分鐘創建日期格式

我有日期,小時和分鐘的字符串格式。

我有eventAction ='註冊完成'或visitNumber = 1的行數,並使用min()函數查找最早的時間。

畢竟我想計算兩個小時之間的差異。 (日期)+ 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

是什麼日期,小時和分鐘之間取得適當的串聯 - TIMESTAMP(日期)+ 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傳統的SQL - 你可以使用的TIMESTAMP_MILLIS()MSEC_TO_TIMESTAMP()代替

畢竟我想要計算小時兩個時間之間的區別。

對於標準SQL - 您可以使用TIMESTAMP_DIFF()作爲

TIMESTAMP_DIFF(Timestamp1, Timestamp2, HOUR) 

或爲傳統的SQL - 你可以使用

(TIMESTAMP_TO_SEC(Timestamp1) - TIMESTAMP_TO_SEC(Timestamp2))/3600 
+0

謝謝米哈伊爾,但hits.hour和hits.minute的名字我的數據中的字段。我沒有一個日期,小時,分鐘和秒組合的字段,只有3個字段格式的字段... – Raya

+0

@Raya - 是你的表 - 谷歌分析數據?那是我的假設。如果是GA數據 - 請再次閱讀我的答案!如果不是 - 只是讓我們知道 - 所以不會有混淆 –

+0

我們有GA360,我與BigQuery一起使用我們保存並顯示在Google Analytics中的所有數據。它回答你的問題嗎? – Raya