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

Откуда:
Сообщений: 531
Мне это все потом переводить на кастрированный query builder от 3rd party, так что просьба ответить голым sql

есть 2 таблицы, Vehicle и Rental. Отношение 1:1.
То есть у Vehicle есть ID, у Rental есть ID и VehicleID.

Конкретный Vehicle может и не иметь ассоциированных записей в таблице Rental (то есть машина новая, и в аренде еще не учавствовала).
А может много раз встречаться, то есть машину арендовали часто.

у Rental есть 2 поля дат: FromDate, ToDate.
и есть 2 параметра к запросу: FromDate, ToDate.

у Rental есть поле IsCancelled (bit). Если равно 1, то не важно какие даты у этой записи в FromDate, ToDate.

Общая задача: найти те машины, которые на период FromDate - ToDate свободны.

Спасибо
21 окт 14, 16:49    [16738407]     Ответить | Цитировать Сообщить модератору
 Re: Подсобите с запросом  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
select
    *
from    Vehicle a
where
    not exists (
        select
            *
        from    Rental  x
        where
            a.id = x.id
            and x.IsCancelled = 0
            and (
                @FromDate between x.FromDate and x.ToDate
                or @ToDate between x.FromDate and x.ToDate
            )
    )


Сообщение было отредактировано: 21 окт 14, 16:54
21 окт 14, 16:54    [16738471]     Ответить | Цитировать Сообщить модератору
 Re: Подсобите с запросом  [new]
tual
Member

Откуда:
Сообщений: 531
Не только такая проверка дат... параметры дат могут целиком охватывать диапазон дат из записи в rental
Проще говоря, параметры 20-25 октября, в записи 22-23 - это значит что машина занята
21 окт 14, 17:37    [16738941]     Ответить | Цитировать Сообщить модератору
 Re: Подсобите с запросом  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31961
tual
Не только такая проверка дат... параметры дат могут целиком охватывать диапазон дат из записи в rental
Проще говоря, параметры 20-25 октября, в записи 22-23 - это значит что машина занята
Что бы написать такой запрос, достаточно словами рассказать, что значит "найти те машины, которые на период FromDate - ToDate свободны". Неужели это так сложно? :-(
and (
    @FromDate <= x.ToDate
    and @ToDate >= x.FromDate
)

<= и >= нужно заменить на < и >, в зависимости от определения "занято" и типов полей с датами.
21 окт 14, 18:15    [16739138]     Ответить | Цитировать Сообщить модератору
 Re: Подсобите с запросом  [new]
tual
Member

Откуда:
Сообщений: 531
Да я уже подправил запрос, но думал что само собой машина занята, если она внутри искомого периода занята.
И там >= ибо надо еще время сравнивать
21 окт 14, 18:40    [16739242]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить