Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL по выводу постоянных пользователей [FireBird 1.5]


Страницы:   1 2

DelphiN! ©   (2007-10-19 12:45:00) 

Есть таблицы CASEBASE и USERS
с полями

таблица: CASEBASE
Поля: UserName_         Time_

Содержит: список всех операций пользователей
UserName_ - имя пользователя
Time_ - время начала операции
-----------

Таблица: Users
Поля: UserName_         RegistredTime_

Содержит: Время регистрации каждого пользователя
UserName_ имя пользователя
RegistredTime_  время регистрации

------------------

Необходимо вывести список пользователей,которые сделали более 2х операций за период времени, при этом время регистрации пользователей, попадающих под условие должно быть более 30ти дней от времени операции

Вот что у меня получилось :



SELECT UserName_,
count (distinct EXTRACT(DAY FROM Time_)||'.'||EXTRACT(MONTH FROM Time_)||'.'||EXTRACT(YEAR FROM Time_))
FROM CaseBase WHERE (TIME_ > '15.08.2007')and(TIME_ < '15.09.2007')and (exists (select REGISTREDTIME_ from users where (casebase.UserName_ = users.UserName_)and((casebase.time_ - users.registredtime_)>30)))
GROUP BY cardno_

having count (distinct EXTRACT(DAY FROM Time_)||'.'||EXTRACT(MONTH FROM Time_)||'.'||EXTRACT(YEAR FROM Time_)) > 2
ORDER BY 2



Однако данный запрос выводит пустоту, где у меня ошибка?


Sergey13   (2007-10-19 13:19:00) [21]

> [0] DelphiN! ©   (19.10.07 12:45)

Может я не вник в суть, но зачем вычислять
count (distinct EXTRACT(DAY FROM Time_)||'.'||EXTRACT(MONTH FROM Time_)||'.'||EXTRACT(YEAR FROM Time_))
вместо просто count(*) если надо просто посчитать количество операций?


DelphiN!   (2007-10-19 13:17:00) [22]


> Маша Шрайбер ©   (19.10.07 13:12) [2]


Упс, извеняюсь, просто на форуме изменил реальные названия на более понятные, и вконце забыл


SELECT UserName_,
count (distinct EXTRACT(DAY FROM Time_)||'.'||EXTRACT(MONTH FROM Time_)||'.'||EXTRACT(YEAR FROM Time_))
FROM CaseBase WHERE (TIME_ > '15.08.2007')and(TIME_ < '15.10.2007')and (exists (select REGISTREDTIME_ from users where (casebase.UserName_ = users.UserName_)and((casebase.time_ - users.registredtime_)>30)))
GROUP BY UserName_

having count (distinct EXTRACT(DAY FROM Time_)||'.'||EXTRACT(MONTH FROM Time_)||'.'||EXTRACT(YEAR FROM Time_)) > 2
ORDER BY 2


Маша Шрайбер   (2007-10-19 13:12:00) [23]

А запрос-то вообще работает? Ведь как-то странно, выборка одного поля, группировка по другому.


DelphiN!   (2007-10-19 13:11:00) [24]

Разобрался, у меня интервал времени был неверно указан просто ...

Тогда другой вопрос. Данный SQL выполняется очень долго, как можно его ускорить?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо