यहां एक और तरीका है जो सहसंबद्ध उपश्रेणियों या विंडो फ़ंक्शन के बिना काम करता है:
प्रत्येक पंक्ति के लिए w1
, दूसरी पंक्ति खोजने का प्रयास करें w2
उसी call_id और 0 के साथ कॉल पूरा होने का संकेत देता है। LEFT OUTER JOIN का उपयोग करके, हम उन मामलों के लिए परीक्षण कर सकते हैं जहां कोई w2
. नहीं है किसी दिए गए call_id के लिए पंक्ति मौजूद है।
फिर एक और काल्पनिक पंक्ति में शामिल हों w3
समान call_id और कम ast_num_curr मान के साथ। फिर से, बाहरी जुड़ाव का उपयोग करके, हम जांच सकते हैं कि ऐसी कोई पंक्ति मौजूद नहीं है। इसका मतलब है w1
उस call_id के लिए ast num के लिए न्यूनतम मान होना चाहिए।
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 |
+---------+----------------+
काउंट्स प्रति क्यू_नम_कुर प्राप्त करने के लिए, उपरोक्त क्वेरी को व्युत्पन्न-टेबल सबक्वेरी में लपेटें, और बाहरी क्वेरी में काउंट करें:
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 |
+----------------+-------+