Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: украшаем запрос MS SQL
Показать сообщение отдельно
pva pva вне форума Автор темы

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


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

Отправлено: 22:12, 16-09-2008 | #8

Название темы: украшаем запрос MS SQL