Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tạo truy vấn để biết số lượng cuộc gọi chưa hoàn thành

Đây là một phương pháp khác hoạt động mà không có truy vấn con hoặc hàm cửa sổ tương quan:

Đối với mỗi hàng w1 , hãy thử tìm một hàng khác w2 có cùng call_id và số 0 cho biết cuộc gọi đã hoàn tất. Sử dụng THAM GIA NGOÀI TRÁI, chúng tôi có thể kiểm tra các trường hợp không có w2 hàng tồn tại cho một call_id nhất định.

Sau đó, thực hiện một phép nối khác với hàng giả định w3 có cùng call_id và giá trị ast_num_curr nhỏ hơn. Một lần nữa, bằng cách sử dụng phép nối bên ngoài, chúng ta có thể kiểm tra xem không có hàng nào như vậy tồn tại. Điều này có nghĩa là w1 phải có giá trị nhỏ nhất cho ast num cho 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;

Đầu ra:

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

Để nhận số lượng trên mỗi queue_num_curr, hãy đặt truy vấn ở trên trong một truy vấn con của bảng dẫn xuất và thực hiện đếm trong truy vấn bên ngoài:

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;

Đầu ra:

+----------------+-------+
| 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. Làm cách nào để nối các cột với Laravel 4 Eloquent?

  2. Chỉ nhận các chữ số bằng regexp

  3. In truy vấn thực tế MySQLdb chạy?

  4. Rất nhiều trạng thái Kết thúc Truy vấn trong MySQL, tất cả các kết nối được sử dụng trong vài phút

  5. Xóa đệ quy CakePHP