Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Подскажите с написанием запроса  [new]
noname-141
Member

Откуда:
Сообщений: 5
Дана таблица Period (id - int, datebegin - datetime, dateend - datetime), где дата начала меньше или равна дате конца. В данной таблице две записи с id 1 и 2. Необходимо получить начальную и конечную точки пересечения периодов данных двух записей.
___
10 авг 16, 14:10    [19524939]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с написанием запроса  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20600
start=case when start1<start2 and end1>start2 then start2 
           when start1>start2 and end2>start1 then start1
           else null 
           end

Анальногично с концом периода.
10 авг 16, 14:20    [19524978]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с написанием запроса  [new]
noname-141
Member

Откуда:
Сообщений: 5
Akina, это получение начальной точки пересечения? только начал разбираться ms sql, до этого на firebird был. не совсем понимаю откуда взялись переменные start/end
10 авг 16, 14:33    [19525058]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с написанием запроса  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20600
noname-141
это получение начальной точки пересечения?
Да.

noname-141
не совсем понимаю откуда взялись переменные start/end

Как же ты на файре запросы-то писАл???

SELECT case when t1.datebegin<t2.datebegin and t1.dateend>t2.dateend then t2.datebegin
            when t1.datebegin>t2.datebegin and t2.dateend>t1.datebegin then t1.datebegin
            else null 
            end AS intersection_start
FROM Period t1, Period t2
WHERE t1.id=1 
  AND t2.id=2

Так понятнее?
10 авг 16, 14:43    [19525107]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с написанием запроса  [new]
noname-141
Member

Откуда:
Сообщений: 5
Akina,
да спасибо! немного запутался я! но сейчас все стало понятно. А не подскажешь, как реализовать если некоторые поля begin_date/end_date могут быть нулами?
10 авг 16, 18:09    [19526158]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с написанием запроса  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
noname-141,

isnull()
10 авг 16, 18:16    [19526194]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с написанием запроса  [new]
noname-141
Member

Откуда:
Сообщений: 5
Владислав Колосов, по конкретнее можно?
10 авг 16, 18:26    [19526229]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с написанием запроса  [new]
noname-141
Member

Откуда:
Сообщений: 5
Владислав Колосов,
у меня идет сравнение каждого периода для выявления начала точки пересечения начала периода а потом конца периода. Нужно реализовать тоже самое, что я писал выше, только теперьесли значения периодов могут быть нулами.
Это дополнительное условие нужно?
На проверку что оно не пустое?
10 авг 16, 18:29    [19526247]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите с написанием запроса  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20600
noname-141
значения периодов могут быть нулами
Для того, чтобы получить вменяемый результат, нужно NULL заменять на некое значение. Это делается функцией COALESCE() - точно такой, как и в известном тебе Firebird.
10 авг 16, 21:13    [19526765]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить