-
Всем доброго времени суток! Хочу вывести минимальную, максимальную и среднюю выручку по датам для клиентов тип которых Card User, однако если добавляю условие проверки типа клиента, запрос выводит пустоту, хотя такие клиенты в БД 100% есть. В чем может быть дело?
select distinct(cast(time_ as date)) DATE_,min(summ_),avg(summ_),max(summ_)
from casebase MAIN where (prim_ <> 'Login activated')
and (prim_ <> 'Login deactivated')and(time_ >= '01.07.2008')and
((select type_ from users where cardno_ = main.cardno_) = 'Card User')
group by 1
order by 1
-
запрос выводит пустоту, хотя такие клиенты в БД 100% есть.
1000 % что нет
-
> Медвежонок Пятачок © (24.07.08 12:15) [1]
:) Клиенты со значением в поле Users.type_ равным "Card User" - есть!
-
Поочереди отключи каждое условие и узнаешь что неправильно.
-
Но у тебя запрос-то не такой select * from clients where Users.type_ = "Card User"
-
> stas © (24.07.08 12:19) [3] > > Поочереди отключи каждое условие и узнаешь что неправильно. >
А я знаю какое не правильно, я его выделил жирным ((select type_ from users where cardno_ = main.cardno_) = 'Card User') но вот как сделать правильно, не знаю ...
-
а зачем Card User снаружи скобок
-
выбери одного юзера, который точно вернет твой запрос без этого условия и выполни отдельно запрос, что он вернул? select type_ from users where cardno_ = юзер
-
and ((select type_ from users where cardno_ = main.cardno_) = 'Card User')
and exists(select null from users where cardno_ = main.cardno_ and тип = 'Card User')
-
> Медвежонок Пятачок © (24.07.08 12:19) [4] > > Но у тебя запрос-то не такой > select * from clients where Users.type_ = "Card User"
По моему предположению В основном запросе при прохождении каждого пользователя делается под запрос ((select type_ from users where cardno_ = main.cardno_) = 'Card User'), который в свою очередь находит текущего пользователя(из основного запроса) в таблице Users и возвращает его тип, а основной запрос сравнивает, соответствует ли этот тип необходимому. Но к сожалению мое предположение не является верным, а как его сделать верным я не знаю ... :(
-
а как его сделать верным я не знаю ... :(
Знаешь, но не признаешься. Надо выучить язык запросов
-
> stas © (24.07.08 12:24) [7]
> выбери одного юзера, который точно вернет твой запрос без > этого условия и выполни отдельно запрос, что он вернул? > select type_ from users where cardno_ = юзер
Он вернул "Card User"
> Медвежонок Пятачок © (24.07.08 12:24) [8] > > and > ((select type_ from users where cardno_ = main.cardno_) > = 'Card User') > > and exists(select null from users where cardno_ = main.cardno_ > and тип = 'Card User')
Заработало!!! Спасибо всем большущее!!!
-
> делается под запрос ((select type_ from users where cardno_ = main.cardno_) = 'Card User') простой join в явном виде будет и быстрее и нагляднее...
select * from casebase с INNER JOIN users u ON c.cardno_ = u.cardno_ WHERE u.type_ = 'Card User'
возвращает данные? а убрать условие в WHERE?
+ distinct(cast(time_ as date)) нафиг не нужен, раз у тебя по этому полю группировка, оно и так будет уникально по значениям.
|