Ho questa domanda ( 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
Voglio elencare tutte le società e mostrare l'utente e lo stato in cui hanno fatto un'azione per l'ultima volta sulla società. Allo stesso tempo, mostrare alle aziende in cui non sono state intraprese azioni.
Problema 2
Devo anche essere in grado di cercare l'utente per nome, quindi selezionando tutte le società in cui questo utente ha avuto l'ultima attività. La query è fatta da un modulo, quindi posso iniettare variabili.
Al momento non sono in grado di modificare il database SCHEMA, ma i consigli per una futura migrazione sono molto apprezzati.
Ho provato a legarlo insieme INNER JOIN ( SELECT.. ) t ON
ma non riesco a pensarci.
Ho anche provato i metodi da qui , qui e qui, ma non riesco a trovare la persona con l'ultima attività nel modo giusto.
Versione MySQL: 5.5.16. La tabella aziendale ha circa 1 milione di file e la tabella azioni è a 70 KB, in crescita. Le prestazioni sono importanti per me qui.
Come può essere risolto?
MAX(Marks)
perTaskID
, vuoiMAX(ActivityDate)
perCompany
.) Non c'è molta differenza se hai una tabella o un join.