Страница 1 из 1

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

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

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

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

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

Добавлено: 12 дек 2012, 16:15
boyfox
с 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

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

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

Добавлено: 13 янв 2013, 23:58
boyfox
Значит так никто и не может помочь ( Вроде подробно же расписал

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

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

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

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

Добавлено: 15 янв 2013, 20:11
boyfox
Не имею права с Вами спорить.
Возможно дело не в запросе а в самом алгоритме выборки? так подскажите..
Если правильный,то..
В своём запросе я прошу выбрать все телефоны клиентов, у которых есть заказы после '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 нет

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

Добавлено: 16 янв 2013, 14:34
Dimitry Sibiryakov
Зато есть агрегатная функция MIN() и кляуза HAVING в которой их (агрегатные функции) можно использовать.

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

Добавлено: 16 янв 2013, 22:49
boyfox
Dimitry Sibiryakov
Большое спасибо ;)
Запрос реально тривиальный.. когда знаешь о функции having min(a.t_zakaz)