Одним из вариантов является разделение сроков по частям, и разделить все возможности:
- от сотрудника даты начала до даты начала компании в случае, если они перекрывают друг друга
- от сотрудника даты начала до работника даты окончания в случае, если они не перекрывают друг друга
- от компании даты начала до даты окончания работника в случае, если дате окончания работников до даты конца компании
- с compoany даты начала до даты окончания компании в случае дате окончания работника после даты окончания компании и т.д.
Затем вы можете объединить все запросы вместе с «союзом всех», что приведет в запросе, как это (я мог забыть некоторые возможности):
select c.companyid
, e.empid
, e.start_date
, e.end_date
, 0
from company c
, employee e
where e.empid = c.empid
and e.end_date <= c.start_date
union all
select c.companyid
, e.empid
, e.start_date
, c.start_date
, 0
from company c
, employee e
where e.empid = c.empid
and e.start_date <= c.start_date
and e.end_date > c.start_date
union all
select c.companyid
, e.empid
, c.start_date
, e.end_date
, c.salary
from company c
, employee e
where e.empid = c.empid
and e.start_date <= c.start_date
and e.end_date > c.start_date
and e.end_date <= c.end_date
union all
select c.companyid
, e.empid
, c.start_date
, c.end_date
, c.salary
from company c
, employee e
where e.empid = c.empid
and e.start_date <= c.start_date
and e.end_date > c.end_date
union all
select c.companyid
, e.empid
, c.end_date
, e.end_date
, 0
from company c
, employee e
where e.empid = c.empid
and e.start_date <= c.start_date
and e.end_date > c.end_date
и результат be:
companyid empid start_date end_date salary
1 123 5/1/2015 5/7/2015 0
1 123 5/7/2015 5/15/2015 10000
1 123 5/15/2015 5/30/2015 0
Вы должны написать код, который вы пробовали, чтобы люди могли вам помочь. – AlvaroSantisteban
В первой таблице, откуда вы знаете, для чего предназначена компания EMPID? Ваша структура данных кажется неполной. –