2013-03-25 30 views
0

我们在BigQuery中的非规范化的数据:SQL(大)查询序贯性

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  ... 

什么是发现住在SF他们住在洛杉矶之前用户的最有效方法是什么?

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

这将是更好,如果列表中有两个日期和城市:

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

回答

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 

注意“每个”联接子句中,因为表的大小可能会很大。查看BigQuery JOIN reference

0

我想你应该加入类似的信息(伪代码) (SELECT时间LA_TIME其中城市= LA GROUP BY用户)并标记TIME_LA> TIME所在的城市= SF的所有行。在这个“帮助”列中,HAVING clausule会过滤OUTPUT。

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