Существует две таблицы:
Таблица1 (id, p1, p2, date_from, date_to):
(1, 'z', 55, '01.05.2010 12:30:20', '17.05.2010 13:10:14'),
(1, 'c', null, '17.05.2010 13:10:15', '18.01.2010 04:13:15'),
(1, 'c', 25, '18.01.2010 04:13:16', '01.01.9999 00:00:00');
Table2 (id, p3, date_from, date_to):
(1, 15, '01.04.2010 12:30:20', '02.05.2010 13:10:14'),
(1, 35, '02.05.2010 13:10:15', '01.01.9999 00:00:00');
Необходимо, чтобы при объединении 2 таблиц были поля, содержащие историю изменений каждого параметра. То есть:
Выбор (id, p1, p2, p3, date_from, date_to):
(1, null, null, 10, '01.04.2010 12:30:20', '01.05.2010 12:30:19'),
(1, 'z', 55, 15, '01.05.2010 12:30:20', '02.05.2010 13:10:14'),
(1, 'z', 55, 35, '02.05.2010 13:10:15', '17.05.2010 13:10:14'),
(1, 'c', null, 35, '17.05.2010 13:10:15', '18.01.2010 04:13:15'),
(1, 'c', 25, 35, '18.01.2010 04:13:16', '01.01.9999 00:00:00');
Где записи из двух таблиц не перекрываются во времени (или части времени), должен быть выведен ноль.
Пока я сделал:
select
a.id,
case
when a.date_to between b.date_from and b.date_to
or a.date_from between b.date_from and b.date_to
then p1
end as p1,
case
when a.date_to between b.date_from and b.date_to
or a.date_from between b.date_from and b.date_to
then p2
end as p2,
p3,
a.date_from as af,
b.date_from as bf,
a.date_to as at,
b.date_to as bt
from
Table1 a
left join Table2 b
on
a.id=b.id
and (b.date_from between a.date_from and a.date_to
or a.date_from between b.date_from and b.date_to)