bigquery - 左边连接在右表中的最新记录,而没有超过左表的时间戳

时间:2012-12-31 20:21:03

标签: google-bigquery

所以我有一张购买表:
USER_ID
purchase_time

我在网站上有一个用户活动表:
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 个答案:

答案 0 :(得分: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

我希望这可以帮助您解决问题。