Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Erstellen Sie eine Abfrage, um die Anzahl der nicht abgeschlossenen Anrufe zu erhalten

Hier ist eine andere Methode, die ohne korrelierte Unterabfragen oder Fensterfunktionen funktioniert:

Für jede Zeile w1 , versuchen Sie, eine andere Zeile w2 zu finden mit derselben call_id und einer 0, die angibt, dass der Anruf abgeschlossen ist. Mit einem LEFT OUTER JOIN können wir auf Fälle testen, in denen kein w2 vorhanden ist Zeile existiert für eine gegebene call_id.

Führen Sie dann eine weitere Verknüpfung mit einer hypothetischen Zeile w3 durch mit derselben call_id und einem geringeren ast_num_curr-Wert. Auch hier können wir mithilfe von Outer Join überprüfen, ob keine solche Zeile vorhanden ist. Das bedeutet w1 muss den kleinsten Wert für ast num für diese call_id haben.

SELECT w1.call_id, w1.queue_num_curr
FROM waiter_log AS w1
LEFT OUTER JOIN waiter_log AS w2
  ON w1.call_id = w2.call_id AND w2.proceed_wait = 0 
LEFT OUTER JOIN waiter_log AS w3
  ON w1.call_id = w3.call_id AND w1.ast_num_curr > w3.ast_num_curr
WHERE w2.call_id IS NULL AND w3.call_id IS NULL;

Ausgabe:

+---------+----------------+
| call_id | queue_num_curr |
+---------+----------------+
| 49c43ad |           9004 |
| asdf231 |           9010 |
| rete125 |           9010 |
+---------+----------------+

Um die Anzahl pro queue_num_curr zu erhalten, packen Sie die obige Abfrage in eine abgeleitete Tabellen-Unterabfrage und führen Sie die Zählung in der äußeren Abfrage durch:

SELECT queue_num_curr, COUNT(*) AS count
FROM (
  SELECT w1.call_id, w1.queue_num_curr
  FROM waiter_log AS w1
  LEFT OUTER JOIN waiter_log AS w2
    ON w1.call_id = w2.call_id AND w2.proceed_wait = 0
  LEFT OUTER JOIN waiter_log AS w3
    ON w1.call_id = w3.call_id AND w1.ast_num_curr > w3.ast_num_curr
  WHERE w2.call_id IS NULL AND w3.call_id IS NULL
) AS t
GROUP BY queue_num_curr;

Ausgabe:

+----------------+-------+
| queue_num_curr | count |
+----------------+-------+
|           9004 |     1 |
|           9010 |     2 |
+----------------+-------+