SQL(bigquery顺序属性

时间:2013-03-25 05:21:17

标签: sql google-bigquery

我们在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       ...

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

输出可以是列表。在上述情况下,只有" A"列出。

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

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

2 个答案:

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

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

答案 1 :(得分:0)

我想你应该加入像(伪代码)这样​​的东西 (SELECT TIME AS LA_TIME,其中Cities = LA GROUP BY User)并标记TIME_LA>的所有行。城市= SF的时间。 OUTPUT将在此“帮助”列上通过HAVING clausule进行过滤。

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