|
|
|
| Надо выполнить запрос выдирающий организации из базы организации в которые не звонили менеджеры за определенный промежуток времени в формате: менеджер (LOGIN) || Дата последнего контакта (DT_CONTACT) || Название организации (NAME).
4 таблицы участвуют в запросе (перечисляю только необходимые поля):
1.USERS
ID
LOGIN
2.PERSON
ID
ORGANIZATION_ID
3.ORGANIZATION
ID
NAME
4.CONTACT
DT_CONTACT
Только один момент: если было 1 или более звонков, нужно вывести дату последнего звонка, если не было звонков (в таблице отсутсвуют записи за весь период) нужно вывести надпись "Контактов не было" | |
|
|
|
|
|
|
|
для: fxsektor
(22.08.2007 в 09:14)
| | Партизанам сложно помочь! | |
|
|
|
|
|
|
|
для: oradev
(22.08.2007 в 10:36)
| | >Партизанам сложно помочь!
нужна какая-то идополнительная информация? | |
|
|
|
|
|
|
|
для: fxsektor
(22.08.2007 в 10:51)
| | -- Надо выполнить запрос выдирающий организации из базы организации в которые не звонили менеджеры за определенный промежуток времени
А где связь между менеджерами и временем звонка ? | |
|
|
|
|
|
|
|
для: oradev
(22.08.2007 в 11:35)
| | Сори, вот полная раскладка:
1.USERS
ID
EDIT_USERS_ID INTEGER
LOGIN
PASSW
FIO
JOBTITLE
GRANTS
COMMENTS
2.PERSON
ID
ORGANIZATION_ID
USERS_ID
EDIT_USERS_ID
FIO
JOBTITLE
TEL_JOB
TEL_MOBILE
EMAIL
COMMENTS
3.ORGANIZATION
ID
ORGANIZATION_TYPE_ID
USERS_ID
ACTUAL_ADDRESS_ID
LEGAL_ADDRESS_ID
POSTAL_ADDRESS_ID
EDIT_USERS_ID
NAME
TEL
FAX
EMAIL
WEB
HOURS
REQ_INN
REQ_KPP
REQ_RACCOUNT
REQ_OKPO
REQ_OKVED
REQ_BIK
REQ_BANK
REQ_KACCOUNT
ACTIVITY
REMINDER
COMMENTS
4.CONTACT
ID
PERSON_ID
CONTACT_TYPE_ID INTEGER
USERS_ID -------- ID юзера
EDIT_USERS_ID
DT_CONTACT -------- дата&время контакта
COMMENTS | |
|
|
|
|
|
|
|
для: fxsektor
(22.08.2007 в 13:42)
| | Очень много излишнего, нужно лишь связи между таблицами и данные которые нужно выбрать. Я так понимаю у вас 3 ключевые таблицы:
1) person - словарь менеджеров
2) organization - словарь организаций
3) contact - таблица отношение между табл 1 и 2,выражающая время звонка менеджера в организацию (отношение N:M) | |
|
|
|
|
|
|
|
для: oradev
(22.08.2007 в 14:16)
| | Может как то так?
SELECT users.name, MAX(contact.dt_contact), organisation.name
FROM users
LEFT JOIN contact on contact.users.id=users.id
LEFT JOIN organisation on organisation.users.id=contact.users.id
WHERE contact.dt_contact > NOW() - INTERVAL 3 MONTH
GROUP BY users.id;
|
| |
|
|
|
|
|
|
|
для: Furst
(22.08.2007 в 14:44)
| | чет скрипт не работает, надо посмотреть MAX() можно ли здесь использовать? | |
|
|
|
|
|
|
|
для: fxsektor
(22.08.2007 в 15:55)
| | А если так
SELECT users.fio, MAX(contact.dt_contact), organisation.name
FROM users
LEFT JOIN contact on contact.users_id=users.id
LEFT JOIN organisation on organisation.users_id=contact.users_id
WHERE contact.dt_contact > NOW() - INTERVAL 3 MONTH
GROUP BY users.id
|
| |
|
|
|
|
|
|
|
для: Faraon
(22.08.2007 в 16:23)
| | Ребята (Furst, Faraon), это бесполезно - автор не знает что хочет сам! | |
|
|
|
|
|
|
|
для: oradev
(22.08.2007 в 17:06)
| | oradev
я уверен в том, что:
1.представляю, какой я хочу получить конечный результат;
2.не смогу скрипт данного уровня сваять сам;
3.предоставил всю необходимую информацию для получения резульата; | |
|
|
|
|
|
|
|
для: fxsektor
(22.08.2007 в 17:16)
| | Да, налепил я точек не в тему :-). Но запрос от Faraon должен работать. Чем результат не устаивает? | |
|
|
|
|
|
|
|
для: fxsektor
(22.08.2007 в 17:16)
| | Автор привидите какие данные вы хотите получить в результате выборки. Так будет легче и вам и нам. | |
|
|
|
|
|
|
|
для: fxsektor
(22.08.2007 в 17:16)
| | >я уверен в том, что:
>1.представляю, какой я хочу получить конечный результат;
>2.не смогу скрипт данного уровня сваять сам;
>3.предоставил всю необходимую информацию для получения резульата;
и Вы абсолютно правы по всем пунктам. Как минимум по первому и третьему.
Хотя структуру можно было сразу раскрыть так, чтоб все связующие поля были показаны. | |
|
|
|
|
|
|
|
для: fxsektor
(22.08.2007 в 09:14)
| |
select
coalesce(U1.LOGIN,'Not registered') as USER,
coalesce(DTMAX, 'No contacts with ') as DT,
O1.NAME
from ORGANIZATION as O1
left join
(select max(C.DT_CONTACT) as DTMAX, O.ID as OID
from ORGANIZATION as O
join PERSON as P on O.ID = P.ORGANIZATION_ID
join CONTACT as C on P.ID = C.PERSON_ID
where C.DT_CONTACT between '$min' AND '$max'
)as ODM
on O1.ID = ODM.OID
join CONTACT as C1 on ODM.DTMAX = C1.DT_CONTACT
join PERSON as P1 on C1.PERSON_ID = P1.ID
left join USERS as U1 on P1.USERS_ID = U1.ID
|
| |
|
|
|
|
|
|
|
для: Trianon
(23.08.2007 в 00:49)
| | Trianon,
твой скрипт не работает, чтобы выяснить почему ты можешь объяснить каждую строчку, если не трудно конечно.
Пиво с меня | |
|
|
|
|
|
|
|
для: fxsektor
(24.08.2007 в 08:45)
| | :) | |
|
|
|
|
|
|
|
для: fxsektor
(24.08.2007 в 08:45)
| | пиво я не пью. Предпочту мартини.
Не работает - не вопрос. Не пользуйтесь :)
PS.
Прикрепите архив с дампом (структурой и фрагментом данных), тогда можно будет потестировать.
PPS. Я понимаю выражение "не работает", когда его сопровождают диагностическим сообщением и/или указывают отличия результата от ожидаемого (вкупе с дампом) | |
|
|
|
|
|
|
|
для: Trianon
(24.08.2007 в 14:40)
| | ок, спасибо за старания, и за скрипт
дамп не могу выслать по корпоративным соображениям
bye! | |
|
|
|