2012-12-31 17 views
0

所以我有購買的表:
USER_ID
purchase_time

的BigQuery - 左連接上最近的右表中的記錄,但是不能超出左表的時間戳

而且我有一個表網站上的用戶活動:
USER_ID
位置
browse_time

如何將活動表中的購買表加入最近的browse_time活動而不超過purchase_time?

例如,如果我有購表人:

user_id  Purchase_time   amount 
-------  ------------------- ------ 
1   2012-12-13 12:30:00 $20 
2   2012-12-14 23:00:00 $50 

和我有活動表:

user_id  browse_time   location 
-------  -----------   --------- 
1   2012-12-14 23:00:00 Product 3 
1   2012-12-13 12:00:00 Product 1 
1   2012-12-13 11:30:00 Product 2 
2   2012-12-15 00:00:00 Product 5 
2   2012-12-14 22:30:00 Product 7 
2   2012-12-14 20:00:00 Product 6 

我想有以下輸出:

user_id purchase_time   browse_time   location  amount 
------- -----------------  ---------------  ---------- ------- 
1   2012-12-13 12:30:00 2012-12-13 12:00:00 Product 1 $20 
2   2012-12-14 23:00:00 2012-12-14 22:30:00 Product 7 $50 

我試過mysql語法,它沒有工作。我知道bigquery在「on」上不允許「<」或「>」加入語句。那麼,甚至有可能在Big Query中做到這一點?

回答

1

所以,如果你這樣做,你會得到更多的結果比你想:

SELECT 
    user_id 
    purchase_time 
    browse_time 
    location 
    amount 
FROM 
    purchases pur 
JOIN 
    user_activities uav 
ON 
    pur.user_id = uav.user_id 

你想最近user_activities的,所以讓我們做的右側的子查詢加入:

SELECT 
    user_id 
    purchase_time 
    browse_time 
    location 
    amount 
FROM 
    (SELECT 
     user_id AS user_id 
     location AS location 
     MAX(browse_time) AS browse_time 
    FROM 
     purchases 
    GROUP BY user_id,location) pur 
JOIN 
    user_activities uav 
ON 
    pur.user_id = uav.user_id 

我希望這會幫助你解決問題。

+0

謝謝巴拉茲。不幸的是,這將返回最近的,而不是購買之前發生的最新活動(在您的查詢中沒有篩選器)。此外,在購買之前沒有能力獲得一個位置,而不是購買者以前見過的所有位置(以及您的情況,也是購買後)。我能做些什麼來進一步過濾結果。目前我正在運行類似的東西,但結果太大而無法返回。 – user1932483

+0

您可以添加where子句,例如'WHERE pur.browse_time

+0

嗨喬丹,所以添加條款會得到每一個超過購買時間的無形時間。有沒有辦法讓最後一個小於購買時間,而沒有超過時間?兩張桌子之間只有一對一的關係? – user1932483

相關問題