我正在尝试确定某个时间是否位于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
答案 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