【发布时间】:2015-01-31 08:08:44
【问题描述】:
问题
我有 3 个表:客户、公司和电话。
一个客户有很多公司,一个公司有很多电话。 (都是一对多)。
公司的当前状态是公司上次调用的结果 (MAX(created_at))。
现在我想要一个客户的所有公司列表,结果中包含最后一次通话的列。
需要的结果
结果应该是:
公司.*, lastcall.*,
- 可能存在具有相同 created_at 日期的调用。那么结果中应该只有 1 行。
- 并非所有公司都有电话,该公司仍应在结果中,电话的列应为 NULL。 (左连接)
表格
客户
- id(int,主键)
- 名称(varchar)
- 地址(varchar)
- 城市(varchar)
公司
- id(int,主键)
- customer_id (int)
- 名称(varchar)
- 地址(varchar)
- 城市(varchar)
来电
- id(int,主键)
- company_id (int)
- 结果(varchar)
- created_at(日期时间)
尝试
我想出的一个没有用的查询是:
SELECT * FROM companies co
LEFT JOIN calls ca ON co.id = ca.company_id
WHERE co.customer_id = ?
GROUP BY co.id
HAVING ca.created_at = (SELECT max(ll.created_at) FROM calls ll WHERE ll.company_id = co.id)
【问题讨论】:
标签: mysql sql greatest-n-per-group