加入最近的时间戳?急板 SQL

Joining on closest timestamp? Presto SQL

我有 2 个 table 具有纪元值。一个每分钟有多个样本,例如:

id First_name epoch_time
1 Paul 1650317420
2 Jeff 1650317443
3 Raul 1650317455

还有一个每分钟 1 个样本:

id Home epoch_time
1 New York 1650317432

我想做的是加入两个 table 之间最接近的时间戳。理想情况下,找到 tables 1 和 2 之间最接近的值,然后从 table 1 和 2 填充一个字段。我想填充 'Home' 字段并保留其余记录table 1个原样,如:

id Name Home epoch_time
1 Paul New York 1650317420
2 Jeff New York 1650317443
3 Raul New York 1650317455

问题出在实际的连接上。 ID 不是唯一的,因此我不仅需要加入 ID,还需要扫描 2 table 之间最接近的纪元时间。我不能使用相关子查询,因为 Presto 不支持相关子查询。

回答了我自己的问题。它就像首先在每个分钟样本之间添加一些偏移量(例如 LEAD())一样简单,然后在向前看 59 秒的当前分钟样本的表之间的连接中使用 BETWEEN。这样:

WITH tbl1 AS (

    SELECT
        *
    FROM table_1

),

tbl2 AS (

    SELECT
        *,
        LEAD(epoch_time) OVER (
            PARTITION BY
                name,
                home
            ORDER BY
                epoch_time
        ) - 1 AS next_time
    FROM table_2
)

SELECT
    t1.Id,
    t1.Name,
    t2.Home,
    t1.epoch_time
FROM tbl1 t1
LEFT JOIN tbl2 t2
    ON t1.Id = t2.Id
    AND t1.epoch_time BETWEEN t2.epoch_time AND t2.next_time