Busla, Я приведу пример когда этот вариант не работает:
Код:
and (u1.dateIn beetwen u2.dateIn and u2.dateOut or u1.dateOut beetwen u2.dateIn and u2.dateOut)
.....время................
u1 1111111111111111111
u2 2222222222222
ни начало ни конец u1 не входят в u2.
теперь из каких соображений я делал:
Код:
u1 11111111111111
u2 222222222222222
1. если u2 начнётся после того, как u1 закончится - нет пересечения.
2. если u1 начнётся после того, как u2 закончится - нет пересечения.
3. иначе пересекаются.
упрощаем условие:
not (u2.dateOut <= u1.dateIn or u1.dateOut <= u2.dateIn) -->
--> u2.dateOut > u1.dateIn and u1.dateOut > u2.dateIn -->
--> u1.dateIn < u2.dateOut and u2.dateIn < u1.dateOut
Насчёт выборки действительно ступил - заработался. Всё действиетльно можно одним несложным селектом сделать. На сегодня такой вариант:
Код:
select
u1.recId,
u1.groupId,
u1.dateIn,
u1.dateOut
from
услуги u1
join услуги u2 on (
getDate() - 4*7 <= u2.dateIn
and u1.groupId = u2.groupId
and u1.dateIn < u2.dateOut
and u2.dateIn < u1.dateOut
and u1.recId <> u2.recId)
where
getDate() - 4*7 <= u1.dateIn;
order by
u1.groupId,
u1.dateIn