Mysql
 sql >> база данни >  >> RDS >> Mysql

Създайте заявка, за да получите броя на незавършените обаждания

Ето друг метод, който работи без корелирани подзаявки или прозоречни функции:

За всеки ред w1 , опитайте да намерите друг ред w2 със същия call_id и 0, което показва, че повикването е завършено. Използвайки LEFT OUTER JOIN, можем да тестваме за случаи, когато няма w2 ред съществува за даден call_id.

След това направете още едно присъединяване към хипотетичен ред w3 със същия call_id и по-малка стойност ast_num_curr. Отново, използвайки външно присъединяване, можем да проверим дали такъв ред не съществува. Това означава w1 трябва да има най-ниската стойност за ast num за този call_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;

Изход:

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

За да получите броя на queue_num_curr, увийте заявката по-горе в подзаявка на производна таблица и направете броя във външната заявка:

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;

Изход:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:Име на първичния ключ в израза CREATE TABLE

  2. Внедряване и проектиране на архитектура за система за уведомяване с помощта на socket.io node.js и входящи съобщения

  3. Присъединете се към няколко таблици, като запазите NULL

  4. Не може да се покажат стойности, разделени със запетая, в таблица

  5. Вмъкване на XML данни в MySQL таблица с помощта на PHP