mysql group by Select group select value для разных строк столбца - PullRequest
0 голосов
/ 25 октября 2019

У меня ниже таблица.

+----------+--------+-------------------+-------------------+-------------------+-------------+
| src      | dst    | dstchannel        | linkedid          | uniqueid          | disposition |
+----------+--------+-------------------+-------------------+-------------------+-------------+
| 98267859 | 820006 | SIP/8207-0002fbda | 1571884780.349482 | 1571884780.349482 | NO ANSWER   |
| 98267859 | 820006 | SIP/8208-0002fbdb | 1571884780.349482 | 1571884780.349482 | NO ANSWER   |
| 98267859 | 820006 | SIP/8209-0002fbdc | 1571884780.349482 | 1571884780.349482 | NO ANSWER   |
| 98267859 | 820006 | SIP/8210-0002fbdd | 1571884780.349482 | 1571884780.349482 | ANSWERED    |
| 31389779 | 820006 | SIP/8207-0002fbdf | 1571884804.349487 | 1571884804.349487 | NO ANSWER   |
| 31389779 | 820006 | SIP/8208-0002fbe0 | 1571884804.349487 | 1571884804.349487 | NO ANSWER   |
| 31389779 | 820006 | SIP/8209-0002fbe1 | 1571884804.349487 | 1571884804.349487 | NO ANSWER   |
| 31389779 | 820006 | SIP/8210-0002fbe2 | 1571884804.349487 | 1571884804.349487 | ANSWERED    |
| 93870557 | 820005 | SIP/8207-0002fbf8 | 1571885246.349518 | 1571885246.349518 | NO ANSWER   |
| 93870557 | 820005 | SIP/8208-0002fbf9 | 1571885246.349518 | 1571885246.349518 | NO ANSWER   |
| 93870557 | 820005 | SIP/8209-0002fbfa | 1571885246.349518 | 1571885246.349518 | NO ANSWER   |
| 93870557 | 820005 | SIP/8210-0002fbfb | 1571885246.349518 | 1571885246.349518 | ANSWERED    |
| 98174911 | 820006 | SIP/8207-0002fc03 | 1571885371.349528 | 1571885371.349528 | ANSWERED    |
| 98174911 | 820006 | SIP/8208-0002fc04 | 1571885371.349528 | 1571885371.349528 | NO ANSWER   |
| 98174911 | 820006 | SIP/8209-0002fc05 | 1571885371.349528 | 1571885371.349528 | NO ANSWER   |
| 98174911 | 820006 | SIP/8210-0002fc06 | 1571885371.349528 | 1571885371.349528 | NO ANSWER   |
| 96780172 | 820006 | SIP/8207-0002fc31 | 1571886738.349609 | 1571886738.349609 | NO ANSWER   |
| 96780172 | 820006 | SIP/8208-0002fc32 | 1571886738.349609 | 1571886738.349609 | NO ANSWER   |
| 96780172 | 820006 | SIP/8209-0002fc33 | 1571886738.349609 | 1571886738.349609 | NO ANSWER   |
| 96780172 | 820006 | SIP/8210-0002fc34 | 1571886738.349609 | 1571886738.349609 | ANSWERED    |

Здесь каждая запись состоит из 4 строк, я хочу сделать запрос для каждого столбца, чтобы выбрать запись, если она получена, иначе выберитеПервый ряд.

Ниже приведен мой реальный запрос к другим таблицам, к которым мне нужно подключиться при определенных условиях. Все это работает хорошо, за исключением выбора правильного канала DST, если есть ответ на звонок.

SELECT cdr.uniqueid,extension, 
DATE_FORMAT(MAX(calldate),'%d-%m-%Y %H:%i:%s') AS calldate, 
CASE WHEN src IN 
(8207,8208,8209,8210,64566556,64566556,64566556,64566556,820006,820005,'any value here') 
THEN cnum 
ELSE src END AS caller_id_number,
CASE WHEN dst NOT IN (SELECT grpnum FROM asterisk.ringgroups) 
THEN dst 
ELSE 
TRIM(REPLACE(SUBSTRING(dstchannel,1,LOCATE("-",dstchannel,LENGTH(dstchannel)-8)-1),"SIP/",""))
END AS destination, 
TRIM(REPLACE(SUBSTRING(dstchannel,1,LOCATE("-",dstchannel,LENGTH(dstchannel)-8)-1),"SIP/","")) AS dst,
CASE WHEN GROUP_CONCAT(disposition,",") LIKE "%ANSWERED%" THEN "Answered" ELSE "Abandoned" END AS disposition, 
MAX(billsec) AS billsec, (duration-billsec) AS ringtime, duration, 
CASE WHEN recordingfile!='' THEN recordingfile ELSE "No Data" END AS Recording, 
cnam AS CallerID FROM cdr LEFT 
JOIN asterisk.users 
ON cdr.dst=asterisk.users.extension OR
TRIM(REPLACE(SUBSTRING(cdr.dstchannel,1,LOCATE("-",cdr.dstchannel,LENGTH(dstchannel)-8)-1),"SIP/","")) = asterisk.users.extension 
LEFT JOIN cel ON cel.linkedid = cdr.uniqueid 
WHERE dst IN (8207,8208,8209,8210,64566556,64566556,64566556,64566556,820006,820005) 
AND calldate BETWEEN '2019-10-24 00:00:00' AND '2019-10-25 23:59:59' AND disposition = 'Answered'
AND cdr.uniqueid = cel.linkedid GROUP BY cel.linkedid

И мои результаты, как показано ниже


+---------------------+--------------------------+--------------+----------+-----------+-----------+----------+--------------+-----------+
|        DATE         |        Caller ID         |     FROM     |    TO    | Direction | Ring TIME | Duration |  Recording   |  STATUS   |
+---------------------+--------------------------+--------------+----------+-----------+-----------+----------+--------------+-----------+
| 20-10-2019 10:24:47 | 96881508                 | 96881508     |     8207 | Inbound   |         0 |      150 | NO Recording | Answered  |
| 20-10-2019 11:07:40 | 97164881                 | 97164881     |     8207 | Inbound   |         0 |       89 | NO Recording | Answered  |
| 20-10-2019 11:31:55 | 97806791                 | 97806791     |     8207 | Inbound   |         0 |       38 | NO Recording | Answered  |
| 20-10-2019 11:40:49 | 92706696                 | 92706696     |     8207 | Inbound   |         0 |       75 | NO Recording | Answered  |
| 20-10-2019 11:49:23 | 8208 - Aramsa Sgd FD - 2 | 8208         | 92706696 | Outbound  |        14 |      105 |  Recording   | Answered  |
| 20-10-2019 11:53:19 | 8208 - Aramsa Sgd FD - 2 | 8208         | 92706696 | Outbound  |        36 |       24 |  Recording   | Answered  |
| 20-10-2019 12:16:50 | 8208 - Aramsa Sgd FD - 2 | 8208         | 81858355 | Outbound  |        20 |        0 |  Recording   | Abandoned |
| 20-10-2019 12:19:48 | 91825573                 | 91825573     |     8207 | Inbound   |         0 |       27 | NO Recording | Answered  |
| 20-10-2019 12:32:10 | 14159348690              | +14159348690 |     8207 | Inbound   |         0 |      149 | NO Recording | Answered  |
| 20-10-2019 12:50:07 | 8207 - Aramsa Sgd FD - 1 | 8207         | 81807285 | Outbound  |        57 |        0 |  Recording   | Abandoned |
| 20-10-2019 13:14:51 | 8207 - Aramsa Sgd FD - 1 | 8207         | 96788908 | Outbound  |        11 |       10 |  Recording   | Answered` |
+---------------------+--------------------------+--------------+----------+-----------+-----------+----------+--------------+-----------+

1 Ответ

0 голосов
/ 26 октября 2019

Я думаю, что SIP / 8207 - это наименьшее число, насколько я могу судить по вашим данным. Так что мое предложение

Select * From tableA Where disposition = 'ANSWERED'
Union
SELECT * From tableA Where linkedid not  in 
  (Select linkedid From tableA Where disposition = 'ANSWERED') 
and dstchannel LIKE 'SIP/8207%';

Это возвращается, потому что все, где ответили

src         dst     dstchannel          linkedid    uniqueid    disposition
98267859    820006  SIP/8210-0002fbdd   1571884780  1571884780  ANSWERED
31389779    820006  SIP/8210-0002fbe2   1571884804  1571884804  ANSWERED
93870557    820005  SIP/8210-0002fbfb   1571885246  1571885246  ANSWERED
98174911    820006  SIP/8207-0002fc03   1571885371  1571885371  ANSWERED
96780172    820006  SIP/8210-0002fc34   1571886738  1571886738  ANSWERED

Если у вас есть другой шаблон, пожалуйста, покажите образец без ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...