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

Откуда:
Сообщений: 20
Привет всем,
У меня есть таблица с полями:
idКомната ДатаЗаездаДатаВыезда

с такими тестовыми данными:
110117.04.1220.04.12
210219.04.1221.04.12

Мне нужно селектом выбрать те комнаты, которые в определенный период времени не занятые.
Вот пример как должно быть:
Запрос по условиюожидаемый результат
15.04.12 - 18.04.12102
21.04.12 - 25.04.12 101
15.04.12 - 25.04.12 Null
17.04.12 - 20.04.12 102

Как мне реализовать условие выборки, чего-то ничего не лезет в голову, помогите.
Заранее всем спасибо!

PS: дата хранится в формате datetime
5 апр 12, 12:15    [12369659]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по времени  [new]
SirMix
Member

Откуда: Киев
Сообщений: 79
нужно проверить, чтобы дата начала и конца интересующего тебя периода не попадала в уже существующий и все.

я бы сделал это немного по-другому - создал таблицу [Date] со всем набором дат, к примеру за год, и от нее отталкиваясь (проверяя каждый день из нее на вхождение в "занятый" период) составил бы таблицу дат/периодов, в которые есть свободные места, имхо.
5 апр 12, 12:32    [12369733]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по времени  [new]
СС123
Guest
Andry1,

элементарно, только смущает последняя строчка в результате:
17.04.12 - 20.04.12 102

почему в этот период комната 102 свободна оказалась?
5 апр 12, 12:40    [12369788]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по времени  [new]
SirMix
Member

Откуда: Киев
Сообщений: 79
SirMix
нужно проверить, чтобы дата начала и конца интересующего тебя периода не попадала в уже существующий и все.

я бы сделал это немного по-другому - создал таблицу [Date] со всем набором дат, к примеру за год, и от нее отталкиваясь (проверяя каждый день из нее на вхождение в "занятый" период) составил бы таблицу дат/периодов, в которые есть свободные места, имхо.


я имел в виду, чтобы был полный набор "Комната-Date", и его сравниватьс с набором "Комната-ЗанятыйДень"
5 апр 12, 12:49    [12369844]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по времени  [new]
СС123
Guest
Andry1,

в-общем, если бы не последняя непонятная строчка в результате, то я бы написал так:
declare @t table (r int, db date, de date)
insert @t values (101, '20120417', '20120420')
insert @t values (102, '20120419', '20120421')
--insert @t values (103, '20120422', '20120426')

declare
  @db date = '20120415'
 ,@de date = '20120418'

select *
from @t
where (@db < db  and @de < db) or (@db > de and @de > de) 
5 апр 12, 12:52    [12369864]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по времени  [new]
СС123
Guest
СС123
Andry1,
select *
from @t
where (@db < db  and @de < db) or (@db > de and @de > de) 

условие даже можно еще упростить:
where (@db < db  and @de < db) or @db > de
5 апр 12, 12:59    [12369907]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по времени  [new]
Andry1
Member

Откуда:
Сообщений: 20
СС123
Andry1,

элементарно, только смущает последняя строчка в результате:
17.04.12 - 20.04.12 102

почему в этот период комната 102 свободна оказалась?



Да тут мой фейл, там конечный результат Null
5 апр 12, 13:16    [12369989]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по времени  [new]
Andry1
Member

Откуда:
Сообщений: 20
СС123
СС123
Andry1,
select *
from @t
where (@db < db  and @de < db) or (@db > de and @de > de) 

условие даже можно еще упростить:
where (@db < db  and @de < db) or @db > de


Большое спасибо!!! :) работает нориально))
5 апр 12, 13:34    [12370137]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по времени  [new]
iljy
Member

Откуда:
Сообщений: 8711
Andry1,

можно еще упростить
where (@db < de and @de > db)
5 апр 12, 13:40    [12370180]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по времени  [new]
SirMix
Member

Откуда: Киев
Сообщений: 79
iljy
Andry1,

можно еще упростить
where (@db < de and @de > db)


только это выводит как раз занятую комнату
5 апр 12, 13:55    [12370274]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по времени  [new]
iljy
Member

Откуда:
Сообщений: 8711
SirMix
iljy
Andry1,

можно еще упростить
where (@db < de and @de > db)


только это выводит как раз занятую комнату

Соответственно заменить условие на обратное.
5 апр 12, 13:56    [12370282]     Ответить | Цитировать Сообщить модератору
 Re: Выборка по времени  [new]
СС123
Guest
iljy
Andry1,

можно еще упростить
where (@db < de and @de > db)


тогда уж так
where @de < db or @db > de
5 апр 12, 14:22    [12370465]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить