Ich habe diese Abfrage ( 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
)
Problem 1
Ich möchte alle Unternehmen auflisten und dem Benutzer und dem Status anzeigen, wo sie zuletzt eine Aktion für das Unternehmen ausgeführt haben. Zeigen Sie gleichzeitig den Unternehmen, wo keine Maßnahmen ergriffen wurden.
Problem 2
Ich muss auch in der Lage sein, den Benutzer anhand seines Namens zu suchen und dabei alle Unternehmen auszuwählen, bei denen dieser Benutzer die letzte Aktivität hatte. Die Abfrage erfolgt aus einem Formular, sodass ich Variablen einfügen kann.
Ich bin derzeit nicht in der Lage, die Datenbank SCHEMA zu ändern, aber Ratschläge für eine zukünftige Migration werden sehr geschätzt.
Ich habe versucht, es zusammenzubinden, INNER JOIN ( SELECT.. ) t ON
aber ich kann es nicht verstehen.
Ich habe auch Methoden von hier , hier und hier ausprobiert , aber ich kann die Person mit der neuesten Aktivität nicht richtig finden.
MySQL-Version: 5.5.16. Die Firmentabelle hat ungefähr 1 Million Zeilen, und die Aktionstabelle ist bei 70.000 und wächst. Leistung ist mir hier wichtig.
Wie kann das gelöst werden?
MAX(Marks)
perTaskID
möchten SieMAX(ActivityDate)
perCompany
.) Es gibt keinen großen Unterschied, ob Sie eine Tabelle oder einen Join haben.