Исключить из результата select'a ненужные записи
Исключить из результата select'a ненужные записи
Ситуация такова:
Нужно получить все телефоны клиентов, которые делали заказ в период с date1 по date2, но не делали в другое время
select distinct "Phone"
from "Orders" where ... другие условия отбора ... далее идет ограничение "Time" - период с date1 по date2. Дальше не могу разобратся, как исключить те телефоны клиентов, которые делали заказы и во время заданного периода, и за его границами. Пробовал exist'ами, и not in, и пытался подсчитывать кол-во записей за границами периода - если 0, то телефон попадает в результат селекта, пока ничего не получается
Нужно получить все телефоны клиентов, которые делали заказ в период с date1 по date2, но не делали в другое время
select distinct "Phone"
from "Orders" where ... другие условия отбора ... далее идет ограничение "Time" - период с date1 по date2. Дальше не могу разобратся, как исключить те телефоны клиентов, которые делали заказы и во время заданного периода, и за его границами. Пробовал exist'ами, и not in, и пытался подсчитывать кол-во записей за границами периода - если 0, то телефон попадает в результат селекта, пока ничего не получается
Re: Исключить из результата select'a ненужные записи
гм, сначала решил сослаться на
http://www.ibase.ru/devinfo/joins.htm
но потом понял, что не до конца въехал в вопрос. Насколько я понимаю, проблема в том, что сначала нужно выбрать одно, а потом оттуда исключить другое. А как не вышло?
http://www.ibase.ru/devinfo/joins.htm
но потом понял, что не до конца въехал в вопрос. Насколько я понимаю, проблема в том, что сначала нужно выбрать одно, а потом оттуда исключить другое. А как не вышло?
Re: Исключить из результата select'a ненужные записи
А конкретнее - покажи, как с "not exists" не получилось. Или до "not" не додумался?
Re: Исключить из результата select'a ненужные записи
Покажу на примере что требуется:
нужно получить все телефоны, у которых время лежит в приделах от 1 января до 1 мая 2009 года, и в то же время они отсутствуют за границами периода.
В таблице есть
9876543 - 1.03.2009
9876543 - 2.03.2009
9876543 - 3.03.2009 - Все появления этого номера в записи соответствуют периоду, поэтому он попадает в результат
8765432 - 1.06.2009
8765432 - 2.06.2009
7654321 - 1.04.2009
6543210 - 1.02.2009 - в периоде
6543210 - 1.12.2008 - за периодом, поэтому этот номер не выдаем в результат
Правильный результат:
9876543
7654321.
Запрос делал такой
и такой
Оптимизированность запрос не суть важна, запрос будет проводится вручную, редко, в разных фирмах в IBexperte для быстрого экспорта в эксель
нужно получить все телефоны, у которых время лежит в приделах от 1 января до 1 мая 2009 года, и в то же время они отсутствуют за границами периода.
В таблице есть
9876543 - 1.03.2009
9876543 - 2.03.2009
9876543 - 3.03.2009 - Все появления этого номера в записи соответствуют периоду, поэтому он попадает в результат
8765432 - 1.06.2009
8765432 - 2.06.2009
7654321 - 1.04.2009
6543210 - 1.02.2009 - в периоде
6543210 - 1.12.2008 - за периодом, поэтому этот номер не выдаем в результат
Правильный результат:
9876543
7654321.
Запрос делал такой
Код: Выделить всё
select distinct "Phone"
from "Orders"
where {условия проверки корректности номера} and
not exists (select "Phone" from "Orders" where
(("Start_Time" < '1.01.2009') or ("Start_Time" > '1.05.2009')) )
Код: Выделить всё
select distinct "Phone"
from "Orders"
where {условия проверки корректности номера} and
(("Start_Time" > '1.01.2009') and ("Start_Time" < '1.05.2009'))
and "Phone" not in (select "Phone" from "Orders" where
(("Start_Time" < '1.01.2009') and ("Start_Time" > '1.05.2009')) )
Оптимизированность запрос не суть важна, запрос будет проводится вручную, редко, в разных фирмах в IBexperte для быстрого экспорта в эксель
Re: Исключить из результата select'a ненужные записи
Вроде так:
Код: Выделить всё
select distinct "Phone"
from "Orders" OO
where {условия проверки корректности номера} and
"Start_Time" bet '1.01.2009' and '1.05.2009' and not exict (
select 1 from "Orders" OI where OO."Phone" = OI."Phone" and
("Start_Time" < '1.01.2009' or "Start_Time" > '1.05.2009')
)
Re: Исключить из результата select'a ненужные записи
Отлично, спасибо большое, скрипт работает
Re: Исключить из результата select'a ненужные записи
это не скрипт, это запрос. Скрипт это когда несколько sql-запросов. Не путайтесь в терминологии, иначе Вас не везде поймут правильно.