Создать запрос без использования массива

Тема в разделе "Базы данных", создана пользователем Eratt, 13 окт 2013.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Eratt

    Eratt Создатель

    Регистр.:
    27 фев 2009
    Сообщения:
    43
    Симпатии:
    0
    Есть база номеров с указанными занятых периодов с [startData] - по [endData]

    ------------------------------------------
    | number | startData | endData |
    ------------------------------------------
    | 1 | 14-08-2013 | 17-08-2013 |
    | 1 | 21-09-2013 | 27-09-2013 |
    | 2 | 18-08-2013 | 23-08-2013 |
    ------------------------------------------

    Необходимо вывести номера которые свободны в указанный период.
    Пример периода: 14.08.2013 - 16.08.2013

    Помогите создать запрос без использования массива.

    Даты в базе в формате yyyy-mm-dd.
    Написал чтобы было понятно. Вывести все номера.

    Пример запросов:
    Если необходим период: 14.08.2013 - 16.08.2013 то запрос должен вывести: 2
    Если необходим период: 25.08.2013 - 02.09.2013 то запрос должен вывести: 1 и 2

    Пример запроса:
    Нужен номер свободный с 25.08.2013 по 02.09.2013

    Согласно данным из базы, номер 1 и 2 свободны в данный период.

    номер 1 занят с 14-08-2013 по 17-08-2013 и с 21-09-2013 по 27-09-2013
    запрос
    startData <= 14.08.2013 OR endData >= 16.08.2013
    не выдаст номер 1
    условие запроса должно выполнятся по всем периодам одного номера.

    UPD:
    Спасибо, хорошее решение:
    https://www.nulled.cc/threads/245494/#post-2184949
     
    Последнее редактирование модератором: 15 окт 2013
  2. mektek

    mektek Писатель

    Регистр.:
    11 окт 2013
    Сообщения:
    8
    Симпатии:
    0
    select distinct number from table where number not in
    (
    select number from table
    where startData <= endPeriod and endData >=startPeriod
    )
     
Статус темы:
Закрыта.