2016-12-19 5 views
0

Здравствуйте мне нужно пересечь две таблицы с интервалом датпересечения дат интервал между двумя таблицами

Timeline 1

start    | end 
--------------------------------------------- 
2016-12-19 08:00:00 | 2016-12-19 08:30:00 
2016-12-19 09:30:00 | 2016-12-19 11:00:00 

Timeline 2

start    | end 
--------------------------------------------- 
2016-12-19 08:30:00 | 2016-12-19 10:00:00 
2016-12-19 10:30:00 | 2016-12-19 11:00:00 

вот SQL я пробовал:

SELECT * FROM start, end FROM timeline1 
INTERSECT 
SELECT * FROM start, end FROM timeline2 

должен привести, как это:

Итого: 00:60:00

enter image description here

ответ

1

Использование range operators * and &&:

select tsrange(t1."start", t1."end") * tsrange(t2."start", t2."end") as "intersections" 
from timeline1 t1 
join timeline2 t2 
on tsrange(t1."start", t1."end") && tsrange(t2."start", t2."end"); 

       intersections     
----------------------------------------------- 
["2016-12-19 09:30:00","2016-12-19 10:00:00") 
["2016-12-19 10:30:00","2016-12-19 11:00:00") 
(2 rows)  

Сумма интервалов:

select sum(upper("intersections")- lower("intersections")) as total 
from (
    select tsrange(t1."start", t1."end") * tsrange(t2."start", t2."end") as "intersections" 
    from timeline1 t1 
    join timeline2 t2 
    on tsrange(t1."start", t1."end") && tsrange(t2."start", t2."end") 
) s 

    total 
---------- 
01:00:00 
(1 row) 
Смежные вопросы