2

所以我有一张购买表:
user_id
purchase_time
amount

我有一个网站上的用户活动表:
user_id
location
browse_time

如何在不超过 purchase_time 的情况下将 purchase 表与活动表连接起来以获取最新的 browse_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 中是否可以做到这一点?

4

1 回答 1

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

我希望这能帮助你解决问题。

于 2013-01-01T14:55:01.560 回答