Несколько способов, но я не совсем уверен, что вы ищете, чтобы объединить их. Если вы хотите просто вернуть компании, чья максимальная дата регистрации меньше 2009-08-15
, вы можете использовать exists
:
SELECT hc.id_company, hc.name, hc.email, dc.country, dc.date_join,
sum(if(ha.type='ADMIN',1,0)) as ADMIN,
sum(if(length(ha.type)=6,1,0)) as STAFF,
sum(if(ha.type='CUST',1,0)) as CUST
from h_company hc, d_company dc
JOIN h_adminstaffcust ha USING (id_company)
where hc.id_company=dc.id_company
and exists (
SELECT 1
FROM h_company hc1 LEFT JOIN logs ON (hc1.id_company = logs.id_company)
where hc1.id_company = hc.id_company
group by hc1.id_company
having coalesce(max(logs.date), '1900-01-01') < '2009-08-15'
)
group by id_company;
Также обратите внимание, что я использовал coalesce
, чтобы убедиться, что вы захватываете null
журналы.
Теперь, если вы хотите увидеть дату последнего журнала:
SELECT hc.id_company, hc.name, hc.email, dc.country, dc.date_join,
sum(if(ha.type='ADMIN',1,0)) as ADMIN,
sum(if(length(ha.type)=6,1,0)) as STAFF,
sum(if(ha.type='CUST',1,0)) as CUST
from h_company hc, d_company dc
JOIN h_adminstaffcust ha USING (id_company)
inner join (SELECT hc1.id_company, max(logs.date) as maxdate
FROM h_company hc1 LEFT JOIN logs ON (hc1.id_company = logs.id_company)
group by hc1.id_company
having coalesce(max(logs.date), '1900-01-01') < '2009-08-15')) as logs on
hc.id_company = logs.id_company
where hc.id_company=dc.id_company
Если вы хотите сделать это только для конкретной компании, выполните:
SELECT hc.id_company, hc.name, hc.email, dc.country, dc.date_join,
sum(if(ha.type='ADMIN',1,0)) as ADMIN,
sum(if(length(ha.type)=6,1,0)) as STAFF,
sum(if(ha.type='CUST',1,0)) as CUST
from h_company hc, d_company dc
JOIN h_adminstaffcust ha USING (id_company)
inner join (SELECT hc1.id_company, max(logs.date) as maxdate
FROM h_company hc1 LEFT JOIN logs ON (hc1.id_company = logs.id_company)
where hc1.id_company = 1245 --Add where clause here
group by hc1.id_company
having coalesce(max(logs.date), '1900-01-01') < '2009-08-15')) as logs on
hc.id_company = logs.id_company
where hc.id_company=dc.id_company
Таким образом, вы не возвращаете весь список в этом подзапросе.