sql >> Database teknologi >  >> RDS >> Mysql

Opret forespørgsel for at få optælling af uafsluttede opkald

Her er en anden metode, der virker uden korrelerede underforespørgsler eller vinduesfunktioner:

For hver række w1 , prøv at finde en anden række w2 med samme call_id og et 0, der indikerer, at opkaldet er afsluttet. Ved at bruge en LEFT OUTER JOIN kan vi teste for tilfælde, hvor ingen w2 rækken findes for et givet opkalds-id.

Foretag derefter endnu en join til en hypotetisk række w3 med samme call_id og en mindre ast_num_curr værdi. Igen, ved at bruge outer join, kan vi kontrollere, at der ikke findes en sådan række. Det betyder w1 skal have den mindste værdi for ast num for det opkalds-id.

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;
 

Output:

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

For at få tællingerne pr. queue_num_curr skal du pakke forespørgslen ovenfor i en afledt tabelunderforespørgsel og foretage optællingen i den ydre forespørgsel:

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;
 

Output:

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

  1. MySQL 'user_id' i hvor klausulen er tvetydigt problem

  2. Udskrivning af forespørgselsresultater i en tabel

  3. Sådan fungerer SQL Server DIFFERENCE()-funktionen

  4. Sådan bruges JSTL sql tag