Помогите новичку (Выборка новых клиентов)

Модераторы: kdv, CyberMax

Ответить
boyfox
Сообщения: 7
Зарегистрирован: 21 фев 2011, 21:51

Помогите новичку (Выборка новых клиентов)

Сообщение boyfox » 12 дек 2012, 14:13

Есть таблица с полями номер заказа,телефон и дата создания заказа
Как выбрать новых клиентов из этой таблицы? (т.е. телефонные номера, которые имеют заказы за последний месяц и не имели заказов до этого месяца)

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Помогите новичку (Выборка новых клиентов)

Сообщение kdv » 12 дек 2012, 14:54

изучайте SQL. если речь идет об одной таблице, то запрос получается элементарный.
Если же речь о двух таблицах (клиенты и заказы), то нужно читать
http://www.ibase.ru/devinfo/joins.htm

boyfox
Сообщения: 7
Зарегистрирован: 21 фев 2011, 21:51

Re: Помогите новичку (Выборка новых клиентов)

Сообщение boyfox » 12 дек 2012, 16:15

с join работать умеем
Подробнее:
- таблица arch
{поля: t_zakaz -время создания заказа,
cod_cl - код клиента}
- таблица client
{поля: tel - телефон клиента
cod_cl - код клиента}

пробовал запрос такого плана(получил multiple rows вместо результата):
select DISTINCT (c.tel) from arch a join client c on (a.cod_cl=c.cod_cl) where t_zakaz >'01.11.2012 09:00:00' and (select c.tel from arch a join client c on (a.cod_cl=c.cod_cl) where t_zakaz <'01.11.2012 09:00:00' ) is null

Повторюсь Цель-получить номера новых клиентов, которые появились за последний месяц

boyfox
Сообщения: 7
Зарегистрирован: 21 фев 2011, 21:51

Re: Помогите новичку (Выборка новых клиентов)

Сообщение boyfox » 13 янв 2013, 23:58

Значит так никто и не может помочь ( Вроде подробно же расписал

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Помогите новичку (Выборка новых клиентов)

Сообщение kdv » 14 янв 2013, 10:16

статью читайте, до просветления.
вот этот ужас зачем вы пишете?
t_zakaz >'01.11.2012 09:00:00' and (select c.tel ...

p.s. "с join умею" - ага, конечно. с sql вы точно так же умеете.

boyfox
Сообщения: 7
Зарегистрирован: 21 фев 2011, 21:51

Re: Помогите новичку (Выборка новых клиентов)

Сообщение boyfox » 15 янв 2013, 20:11

Не имею права с Вами спорить.
Возможно дело не в запросе а в самом алгоритме выборки? так подскажите..
Если правильный,то..
В своём запросе я прошу выбрать все телефоны клиентов, у которых есть заказы после '01.11.2012 09:00:00' (t_zakaz >'01.11.2012 09:00:00' понимаю что правильнее a.t_zakaz - просто пытался изменить реальные данные на скорую руку) и нет заказов до этого (select c.tel from arch a join client c on (a.cod_cl=c.cod_cl) where a.t_zakaz <'01.11.2012 09:00:00' ) is null
Возможно это в корне неправильно. Хотя если правильно то подскажите где я ошибся
очевидно что "on" я использую для join а "where" для выборки значений
(DISTINCT - просто защита от мультиселекта)
Повторяюсь нужно выбрать только новых клиентов, т.е. клиентов у которых существуют заказы только после '01.11.2012 09:00:00', но конструкции EXISTS ONLY нет

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Помогите новичку (Выборка новых клиентов)

Сообщение Dimitry Sibiryakov » 16 янв 2013, 14:34

Зато есть агрегатная функция MIN() и кляуза HAVING в которой их (агрегатные функции) можно использовать.

boyfox
Сообщения: 7
Зарегистрирован: 21 фев 2011, 21:51

Re: Помогите новичку (Выборка новых клиентов)

Сообщение boyfox » 16 янв 2013, 22:49

Dimitry Sibiryakov
Большое спасибо ;)
Запрос реально тривиальный.. когда знаешь о функции having min(a.t_zakaz)

Ответить