我
认为
这就是您想要的-至少它根据您的示例数据提供了您想要的输出:
select greatest(tb1.start_date, tb2.start_date, tb3.start_date) as max_start_date,
least(tb1.end_date, tb2.end_date, tb3.end_date) as max_end_date,
tb3.start_date as tb3_start_date,
tb3.end_date as tb3_end_date,
tb1.j1,
tb1.j2,
tb1.fruit,
tb2.vegetable,
tb3.car
from tb1
join tb2
on (tb2.j1, tb2.j2) = (tb1.j1, tb1.j2)
and daterange(tb2.start_date, tb2.end_date, '[]') && daterange(tb1.start_date, tb1.end_date, '[]')
join tb3
on daterange(tb3.start_date, tb3.end_date, '[]') && daterange(tb1.start_date, tb1.end_date, '[]')
and daterange(tb3.start_date, tb3.end_date, '[]') && daterange(tb2.start_date, tb2.end_date, '[]');
在线示例:
http://rextester.com/HBFY75494