2017-05-31 2 views
0

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.

+0

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

+0

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

Antwort

0

Join the agents Tabelle mit einer Unterabfrage, die die neuesten Anruf-ID zurückzugibt:

SELECT COUNT(*) 
FROM agents AS a 
JOIN (SELECT id AS latest_call 
     FROM calls 
     ORDER BY dateCreated DESC 
     LIMIT 1) AS c ON a.callid = c.id 
WHERE a.id = @agent_you_care_about