【问题标题】:BigQuery Join Using Most Recent Row使用最近的行加入 BigQuery
【发布时间】:2021-11-17 22:47:33
【问题描述】:

我已经看到了这个问题的变体,但已经搜索 StackOverflow 近一周了,现在尝试了各种解决方案,但仍在为此苦苦挣扎。非常感谢您花时间考虑我的问题。

我正在使用 BigQuery 在 GCP 中开展一个研究项目。我有一个表 result 约 1 亿行事件,其中有一个与事件起源的会话相关的 session_id 列。我想将它与另一个表 status 加入到大约 4000 万行中,该表具有相同的 session_id 并跟踪这些会话的状态。两个表都有一个时间列。在result 表中,这是事件的时间。在status 表中,这是任何状态更改的时间。我想使用会话 ID 将 result 表中的行与 status 表中的相应行连接起来,以获得在事件发生之前或之前的会话的最新状态。结果将是result 表中的每一行都将具有有关事件发生时会话状态的相应信息。

我怎样才能做到这一点?有什么方法不会真的低效吗?非常感谢您的帮助!

【问题讨论】:

标签: sql database join google-bigquery


【解决方案1】:

您也许可以使用left join

select r.*, s.status  -- choose whatever columns you want
from result r left join
     (select s.*,
             lead(time) over (partition by session_id order by time) as next_time
      from status s
     ) s
     on r.session_id = s.session_id and
        r.time <= s.time and
        (r.time > s.next_time or s.next_time is null)

【讨论】:

    猜你喜欢
    • 2020-01-29
    • 2019-12-09
    • 2011-04-06
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多