Ich habe zwei Tabellen agents
und calls
. Ein Agent wird immer an einem aktiven Anruf teilnehmen. Einem Agenten, den ein Agent noch nicht beantwortet hat, kann ein weiterer ausstehender Anruf zugewiesen werden.MySQL beitreten in der neuesten Zeile
Ich möchte eine einzelne Abfrage schreiben, die überprüft, um zu sehen, ob der letzte Anruf nach dateCreated
sortiert den Anruf, der derzeit in der Tabelle des Agenten aktiv ist. Hier
ist ein Beispiel, bei dem das aktive Gespräch des Agenten Anruf entspricht: http://sqlfiddle.com/#!9/af5bd/5
Hier ist ein Beispiel, bei dem das aktive Gespräch nicht den Agenten Anruf überein: http://sqlfiddle.com/#!9/70b7e0/8
Die Abfrage bei ich laufe ist
# This does not work
SELECT count(*) from calls c
INNER JOIN agents a ON a.callId = c.id
ORDER BY c.dateCreated DESC LIMIT 1;
# This works
SELECT count(*) from calls c
INNER JOIN agents a ON a.callId = (SELECT id FROM calls ORDER BY dateCreated DESC LIMIT 1)
ORDER BY c.dateCreated DESC LIMIT 1;
Die erste Abfrage gibt immer 1 zurück, aber die zweite Abfrage funktioniert. Ich bin kein großer Fan von dem Schreiben einer zweiten Abfrage in meiner Abfrage. Gibt es einen Weg dahin?
aktualisiert Vielleicht war das nicht klar, aber ich mag im Grunde genommen, wenn der letzte Eintrag in der calls
Tabelle, um zu sehen, die callId
vom agents
Tabelle übereinstimmt.
Wo Sie prüfen, ob der Anruf aktiv ist oder in Ihren Anfragen anhängig? Warum wählen Sie nicht einfach den Status des letzten Anrufs des Agenten, um zu sehen, ob er aktiv oder ausstehend ist? – Barmar
Dies ist ein sehr vereinfachtes Beispiel für das, was ich mache. Ich möchte im Grunde sehen, ob der letzte Eintrag in der Tabelle "calls" dem entspricht, was der Fremdschlüssel callid in der agents-Tabelle ist – Kousha