【问题标题】:On clause conditions when joining tables连接表时的 on 子句条件
【发布时间】:2016-10-06 16:09:55
【问题描述】:

我想加入两个表“Table1”和“Table2”。对于 Table1 中的每个 Id,我必须获取 StartTime 和 StopTime 并参考其 DateTime 在表 1 的 StartTime 和 StopTime 之间的 Table2,然后从表 2 中检索相应的 Point 1 和 Point 2。我尝试加入这两个表和在 on 子句中,我检查了 Table1.StartTime >= Table2.DateTime 和 Table1.StopTime = in on 子句。只是想知道是否有任何补充。任何帮助将不胜感激。

表1:

Id    StartTime                 StopTime    

1    2016-10-05 12:44:21 UTC    2016-10-05 12:59:31 UTC

表2:

Id  DateTime                   Point1       Point2

1   2016-10-05 12:44:21 UTC     52.9        53.2
2   2016-10-05 12:44:24 UTC     33.1        90.1
3   2016-10-05 12:50:47 UTC     52.3        90.8
4   2016-10-05 12:53:23 UTC     52.3        -111.11

结果表:

Id    StartTime                 StopTime                Point1      Point2

1    2016-10-05 12:44:21 UTC    2016-10-05 12:59:31 UTC   52.9      53.2
2    2016-10-05 12:44:21 UTC    2016-10-05 12:59:31 UTC   33.1      90.1
3    2016-10-05 12:44:21 UTC    2016-10-05 12:59:31 UTC   52.3      90.8
4    2016-10-05 12:44:21 UTC    2016-10-05 12:59:31 UTC   52.3     -111.11

【问题讨论】:

  • Bigquery 对 where 条件有同样的限制吗?如果没有,您可以将其编写为 Cross Join + where 条件(可能会影响性能)
  • BigQuery 旧版 SQL 存在限制。如果您使用标准 SQL,则在连接条件中还有更多有效的选项。

标签: sql google-bigquery


【解决方案1】:

对于 BigQuery 标准 SQL(请参阅 Enabling Standard SQL

SELECT Table1.Id, StartTime, StopTime, Point1, Point2
FROM Table1 join Table2
ON Table1.StartTime <= Table2.DateTime 
AND Table1.StopTime >= Table2.DateTime

或者你可以在下面的 ON 子句中使用

ON Table2.DateTime BETWEEN Table1.StartTime AND Table1.StopTime 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多