这是我的问题:
我有3个表:account,account_event和account_subscription
帐户包含以下详细信息:company_name,email,phone,...
account_event 包含以下事件:来电,拨出电话,访问,邮件
我在此查询中使用 account_subscription 来检索“潜在客户”帐户。如果该帐户没有订阅,那么这是一个潜在客户。
我现在使用的是以下查询,该工作正常:
SELECT `account`.*,
(SELECT event_date
FROM clients.account_event cae
WHERE cae.account_id = account.id
AND cae.event_type = 'visit'
AND cae.event_done = 'Y'
ORDER BY event_date DESC
LIMIT 1) last_visit_date
FROM (`clients`.`account`)
WHERE (SELECT count(*)
FROM clients.account_subscription cas
WHERE cas.account_id = account.id) = 0
ORDER BY `last_visit_date` DESC
您可以看到它返回 last_visit_date 。
我想修改我的查询以返回上一个事件详细信息(最后一次联系)。我需要 event_date 和 event_type 。
所以我尝试了以下不起作用的查询,因为显然我不能从我的select子查询中获得多个列。
SELECT `account`.*,
(SELECT event_date last_contact_date, event_type last_contact_type
FROM clients.account_event cae
WHERE cae.account_id = account.id
AND cae.event_done = 'Y'
ORDER BY event_date DESC
LIMIT 1)
FROM (`clients`.`account`)
WHERE (SELECT count(*)
FROM clients.account_subscription cas
WHERE cas.account_id = account.id) = 0
ORDER BY `last_visit_date` DESC
我尝试了很多关于连接的解决方案,但我的问题是我需要为每个帐户获取最后一个事件。
有什么想法吗?
提前谢谢。
杰罗姆
答案 0 :(得分:1)
在子查询中获取PRIMARY KEY
并加入其上的实际表格:
SELECT a.*, ae.*
FROM account a
JOIN account_event ae
ON ae.id =
(
SELECT id
FROM account_event aei
WHERE aei.account_id = a.id
AND aei.event_done = 'Y'
ORDER BY
event_date DESC
LIMIT 1
)
WHERE a.id NOT IN
(
SELECT account_id
FROM account_subscription
)
ORDER BY
last_visit_date DESC
答案 1 :(得分:0)
尝试将子查询移动到from
部分并将其别名;它看起来只是另一个表,你可以从中提取多个列。