2013-03-25 31 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更新後,您不應該受到嵌套選擇輸出大小的限制。