加入两个日期范围

时间:2018-03-06 16:32:30

标签: sql join impala date-range

我有两张如下表格(日期格式:yyyy-MM-dd)。我想要的是根据它们的开始时间和结束时间来记录表A和表B之间的连接历史

P.S。我忘了澄清我下面给出的例子并非详尽无遗。在实际情况中,有3种可能性:(a)在时间T,层次结构在时间T改变而不是监督者(b),监督者改变而不是等级(c)两者同时改变。

1)表A - 层次结构

+--------------+------------+------------+
| hierarchy    |  startime  |  endtime   |
+--------------+------------+------------+
| Value 1      | 2017-01-01 | 2017-03-01 |
| Value 2      | 2017-03-01 | 2017-04-01 |
| Value 3      | 2017-04-01 | NULL       |
+--------------+------------+------------+

2)表B - 主管

+--------------+------------+------------+
|  supervisor  |  startime  |  endtime   |
+--------------+------------+------------+
| supervisor 1 | 2017-01-01 | 2017-02-01 |
| supervisor 2 | 2017-03-01 | NULL       |
+--------------+------------+------------+

3)结果表

+-----------+--------------+------------+------------+
| hierarchy |  supervisor  |  startime  |  endtime   |
+-----------+--------------+------------+------------+
| Value 1   | supervisor 1 | 2017-01-01 | 2017-02-01 |
| Value 1   | NULL         | 2017-02-01 | 2017-03-01 |
| Value 2   | supervisor 2 | 2017-03-01 | 2017-04-01 |
| Value 3   | supervisor 2 | 2017-04-01 | NULL       |
+-----------+--------------+------------+------------+

任何人都知道如何在IMPALA / SQL中执行此操作? 非常感谢! :)

1 个答案:

答案 0 :(得分:0)

这可能会对你有所帮助。

  select a.hierarchy ,b.supervisor  ,a.startime  ,a.endtime  from TableA a inner join TableB b on a.startime  =b.startime and 
    a.endtime=b.endtime