0

我们在 bigquery 中有非规范化数据:

User,   Cities Lived, Time,  Other properites
A       LD            1942
A       SF            1902
A       LA            2004
A       TK            2012
B       SF            1935
B       SD            1972
B       LA            1899
C       ...

找到住在洛杉矶之前住在旧金山的用户的最有效方法是什么?

输出可以是一个列表。在上述情况下,仅列出“A”。

如果列表同时包含日期和城市会更好:

A, 1902, SF, 2004, LA
...
4

2 回答 2

1

您可以使用 JOIN 来计算您想要的结果:

SELECT la_table.user as user, la_table.city, la_table.time,  
  sf_table.city, sf_table.time 
FROM (
  SELECT user, time, city as la from yourTable where city = "LA") as la_table
JOIN EACH (
  SELECT user, time, city as la from yourTable where city = "SF") as sf_table
ON la_table.user = sf_table.user
WHERE la_table.time > sf_table.time

注意连接子句中的“EACH”,因为表的大小可能会很大。请参阅 BigQuery JOIN参考

于 2013-03-25T15:57:50.887 回答
0

我想你应该加入类似(伪代码)(SELECT TIME AS LA_TIME where Cities = LA GROUP BY User)并标记所有行,其中 TIME_LA > TIME where city = SF。OUTPUT 将通过“帮助”列上的 HAVING 子句进行过滤。

上次 BQ 更新后,您不应受到嵌套选择输出大小的限制。

于 2013-03-25T08:54:04.717 回答