Eu tenho esta consulta ( 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
)
Problema 1
Quero listar todas as empresas e mostrar o usuário e o status de onde eles fizeram uma ação pela última vez. Ao mesmo tempo, mostre às empresas onde nenhuma ação foi realizada.
Problema 2
Também preciso procurar o usuário pelo nome, selecionando todas as empresas em que esse usuário teve a última atividade. A consulta é feita a partir de um formulário, para que eu possa injetar variáveis.
Não estou conseguindo alterar o SCHEMA do banco de dados no momento, mas os conselhos para uma migração futura são muito apreciados.
Eu tentei vinculá-lo, INNER JOIN ( SELECT.. ) t ON
mas não consigo entender.
Eu também tentei métodos daqui , aqui e aqui, mas não consigo acertar a pessoa com as atividades mais recentes.
Versão do MySQL: 5.5.16. A tabela da empresa possui cerca de 1 milhão de linhas e a tabela de ações está em 70K, crescendo. O desempenho é importante para mim aqui.
como isso pode ser resolvido?
MAX(Marks)
porTaskID
, você desejaMAX(ActivityDate)
porCompany
.) Não há muita diferença se você tiver uma tabela ou uma junção.