检查时间是否在一组开始和结束时间之内

时间:2019-01-05 01:15:03

标签: hive hiveql

我正在尝试确定某个时间是否位于2个不同表之间的每个ID的开始时间和结束时间的集合中

例如,有2个表Table_A和Table_B

表模式如下所示

ID | timestamp | status-它保存每个时间单位(例如每分钟)的信息

表B模式如下

ID | Start_timestamp | End_timestamp-但是,同一日期的每个ID都有多个条目。

我想弄清楚Table_A中的时间戳是否位于Table_B中的任何start_timestamp或end_timestamps之间

预期结果

Table_A

ID | timestamp | status
1  | 300       | ABC
1  | 600       | ABC
1  | 900       | ABC
1  | 1200      | DEF
...

Table_B

ID | Start_timestamp | End_timestamp
1  | 100             | 400 
1  | 700             | 1000

输出

ID | timestamp | status | Flag
1  | 300       | ABC    | True
1  | 600       | ABC    | False
1  | 900       | ABC    | True
1  | 1200      | DEF    | False

1 个答案:

答案 0 :(得分:1)

这可以通过left join和条件聚合来完成。

select a.id,a.timestamp,a.status
,max(case when a.timestamp between b.start_time and b.end_time then 'True' else 'False' end) as t_f_flag
from tblA a
left join tblB b on a.id = b.id 
group by a.id,a.timestamp,a.status