我们在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
...
答案 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更新后,您不应受嵌套选择输出大小的限制。