У меня проблема с реализацией моего запроса, может быть, кто-то из вас может мне помочь:)
У меня есть 3 таблицы:
1) Документы
DocRef CustRef
Doc1 Cust1
Doc2 Cust2
Doc3 Cust1
2) LinkInter
DocRef InterRef
Doc1 Inter1
Doc2 Inter2
Doc3 Inter3
3) Интер
id InterRef deliverychannel email mobilenb date status
1 Inter1 Email email1@email.be 2013-01-14T00:00:00Z ok
2 Inter1 SMS 0444111111 2013-01-12T00:00:00Z ko
3 Inter1 Other email5@email.be 2013-02-21T00:00:00Z ko
4 Inter2 Email email2@email.be 044456465465 2013-01-21T00:00:00Z ko
5 Inter3 Email 2013-01-21T00:00:00Z ko
6 Inter3 SMS 2013-01-22T00:00:00Z ko
7 Inter3 Other email3@mail.be 2013-01-22T00:00:00Z ko
, чтобы получить лучший вид, перейдите сюда: sqlfiddle
Результат, который я хочуявляется следующим:
CustRef | number of InterRef SMS KO| Last email known| Last mobilenb known
Cust1 | 2 | email5@email.be | 0444111111
Я хочу, чтобы все клиенты, где канал доставки = 'SMS' и статус = 'ko', номер Inter (взаимодействия) со статусом 'KO',последнее известное электронное письмо и последний номер мобильного телефона.
Я пробовал с двумя функциями getLastEmailKnown и getLastmobilenbKnown, но с моими таблицами, которые насчитывают более 10.000.000 записей, это занимает много раз
Я могу получить такой результат на php странице, но это не решение, я хочу иметь только один запрос
Если я выполняю 3 запроса по отдельности, это работает, но я хочу только один
SELECT d.CustRef, count(DISTINCT i.InterRef) , i.email, i.mobilenb
FROM Documents d
INNER join LinkInter link on link.DocRef = d.DocRef
INNER join Inter i on i.InterRef = link.InterRef
and i.deliverychannel = 'SMS'
and i.status = 'ko'
group by d.CustRef
Order by d.CustRef DESC;
SELECT distinct i.email as lastEmailKnown, d.CustRef
FROM Inter i
INNER join LinkInter link on link.InterRef = i.InterRef
INNER join Documents d on d.DocRef = link.DocRef
where d.CustRef = 'Cust1' AND email is not NULL and email <> '' ORDER by date DESC LIMIT 1;
SELECT distinct i.mobilenb as lastmobileKnown, d.CustRef
FROM Inter i
INNER join LinkInter link on link.InterRef = i.InterRef
INNER join Documents d on d.DocRef = link.DocRef
where d.CustRef = 'Cust1' AND mobilenb is not NULL and mobilenb <> '' ORDER by date DESC LIMIT 1;