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

Откуда:
Сообщений: 310
Никак не могу сочинить объединенный запрос

Занятость ящиков
Есть таблица-справочник ящиков (Таблица Box, ключ BoxID)
Нужно выбрать список ящиков, которые не заняты.
Занятость ящиков хранится в таблице BoxBusy, в которой поля:
BoxBusyID, BoxID, StartDate, EndDate, FactDate

Т.е. ящик может быть никогда не был занят, значит его в таблице BoxBusy нет, либо
FacteDate проставлен в таблице BoxBusy, значит уже освободился

Никак не могу сочинить объединенный запрос

Занятость ящиков
Есть таблица-справочник ящиков (Таблица Box, ключ BoxID)
Нужно выбрать список ящиков, которые не заняты.
Занятость ящиков хранится в таблице BoxBusy, в которой поля:
BoxBusyID, BoxID, StartDate, EndDate, FactDate

Т.е. ящик может быть никогда не был занят, значит его в таблице BoxBusy нет, либо
FacteDate проставлен в таблице BoxBusy, значит уже освободился



Вытащил только освобожденные, а никогда не занятых не могу прицепить

select t1.*, t2.FactDate from Box t1 right join BoxBusy t2 on t2.BoxID=t1.BoxID where t1.BoxID is not null and t2.FactDate is not null
25 сен 15, 11:02    [18193688]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу  [new]
st90
Member

Откуда:
Сообщений: 310
st90, упс 2 раза текст вставился
25 сен 15, 11:03    [18193692]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
st90,

откуда задачка-то? Потому что есть нюансы...
25 сен 15, 11:04    [18193704]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу  [new]
st90
Member

Откуда:
Сообщений: 310
iap, моя прога, а что?
В чём нюансы? ))
25 сен 15, 11:05    [18193712]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
st90
iap, моя прога, а что?
В чём нюансы? ))
Может, это с www.sql-ex.ru?
25 сен 15, 11:06    [18193727]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу  [new]
st90
Member

Откуда:
Сообщений: 310
iap, не втыкаю в чём вопрос ))
Собственная программа, базу тоже сам проектировал. Может скрин показать с сервера? ))
25 сен 15, 11:08    [18193737]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2566
st90,
ящик может быть никогда не был занят, значит его в таблице BoxBusy нет
Оформить это запросом, например с NOT EXISTS и сделать UNION с первым?
25 сен 15, 11:25    [18193859]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
st90
iap, не втыкаю в чём вопрос ))
Собственная программа, базу тоже сам проектировал. Может скрин показать с сервера? ))
Не прарьтесь. Собственная - значит всё в порядке
25 сен 15, 11:28    [18193886]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу  [new]
Добрый Э - Эх
Guest
st90,

ну, так-то - тут нужен left join c таблицы ящиков на историю их использования, если что. а не правый от истории на ящики.
25 сен 15, 11:30    [18193913]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу  [new]
Макбет
Member

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

если правильно понял, FactDate - ставится по факту освобождения
как такой вариант? для текущего времени и позже (план)
--@checkDate - на какую дату проверяем
select t1.*, t2.FactDate from Box t1 
left join BoxBusy t2 on t2.BoxID=t1.BoxID and @checkDate between t2.StartDate and t2.EndDate
where t2.BoxID is null
25 сен 15, 11:33    [18193950]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу  [new]
st90
Member

Откуда:
Сообщений: 310
Всем спасибо за подсказки.
Да, FactDate ставится по факту освобождения
Но есть ещё загвоздка, сделал так:

select t1.*, t2.* from Box t1 
left join BoxBusy t2 on t2.BoxID=t1.BoxID 
where t2.BoxID is null or t2.FactDate is not null


Но в таблице BoxBusy хранится история всех заполнений
Т.е. в случае когда ящик заполнили, освободили и ещё раз заполнили всё-равно он выбирается в пустые:

BoxID --- FactDate
1 --- 25.09.2015
1 --- null
28 сен 15, 14:22    [18204376]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите по запросу  [new]
st90
Member

Откуда:
Сообщений: 310
Сделал вроде бы! :)

select t1.*, t2.* from Box t1 
left join (select * from BoxBusy where BoxBusyID in (select max(BoxBusyID) from BoxBusy)) t2 on t2.BoxID=t1.BoxID 
where t2.BoxID is null or t2.FactDate is not null
28 сен 15, 15:06    [18204698]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить