我有此查询(SQLFiddle):
SELECT
c.name,
a.user_id,
a.status_id,
a.title,
a.rtime,
u.user_name,
s.status_name
FROM company c
LEFT JOIN action a ON a.company_id=c.id
LEFT JOIN user u ON u.id=a.user_id
LEFT JOIN status s ON s.id=a.status_id
WHERE u.user_name='Morgan'
-- WHERE c.name='Fiddle'
GROUP BY c.id
HAVING a.rtime IS NULL OR a.rtime = (
SELECT max(rtime)
FROM action a2
WHERE deleted IS NULL
AND a2.company_id = c.id
)
问题1
我想列出所有公司,并显示他们上次对公司采取行动的用户和状态。同时向公司显示未采取任何措施的公司。
问题2
我还需要能够按名称搜索用户,从而选择该用户最近一次活动的所有公司。该查询是从表单进行的,因此我可以注入变量。
我目前无法更改数据库SCHEMA,但对于将来的迁移的建议已备受推崇。
我已经尝试将其绑定在一起,INNER JOIN ( SELECT.. ) t ON
但是我无法理解。
我还在这里,这里和这里尝试过方法 ,但是我无法使拥有最新活动的人正确。
MySQL版本:5.5.16。company表大约有1mill行,而action表则是70K(正在增长)。在这里,性能对我很重要。
如何解决呢?
MAX(Marks)
perTaskID
,而是要MAX(ActivityDate)
perCompany
。)如果有一个表或一个联接,则没有太大区别。