配置单元sql联接表查找最近的行

h6my8fg2  于 2021-06-29  发布在  Hive
关注(0)|答案(1)|浏览(260)

我有以下表格:
tbl1:

V1 | V2 | Time
x    A    1
x    B    4
y    C    5

tbl2:

V1 | Time 
x    2
x    4
y    1

我想加入他们的方式,我得到以下结果

Tbl2.V1 | Tbl1.V2 | Tbl2.Time
x         A         2
x         B         4
y         null      1

换句话说,我想加入v1上的表并从tbl2得到v2,其中tbl1.time<tbl2.time和(tbl2.time-tbl1.time)得到最小值。有什么建议吗?

zyfwsgd6

zyfwsgd61#

在其他数据库中,可以使用相关子查询。这不是一个选择。创建笛卡尔积然后进行聚合是另一种方法——它适用于较小的表。
另一种方法是交错两个表,使用累积函数,然后从第一个表中选择:

select v1, v2, time, t2time
from (select v1, v2, time,
             max(time) over (partition by v1
                             order by time, v2 as nulls first
                            ) as t2time
      from ((select v1, v2, time
             from table1
            ) union all
            (select v1, NULL, time
             from table2
            )
           ) t
     ) t
where v2 is not null;  -- Remove table2 records

我没有在Hive中使用这种方法。我发现它在oracle、sql server和postgres中非常有效。

相关问题