Mysql 查询没有给出 group by 的预期结果

标签 mysql group-by case-when

我有一个queue_log表,其中包含单个调用记录的多个记录,并且对于单个调用行数重复了唯一列call_id。

我有以下查询。


select  case when verb="did"  then data1 end as did, 
        case   when verb='CONNECT' then "Answered" else "Missed" end as status,     
        queue,verb,     
        case when verb in ('connect') then agent end as agent 
from queue_log 
where created between '2019-09-01' and '2019-09-09'  
group by call_id 
having verb in ('did','connect','enterqueue','completecaller','completeagent','abandon','exitwithtimeout');

让我们再解释一下。 如果我在queue_log中有一个调用,它有一个记录,其中verb=did,第二个verb=connect,然后第三个记录,动词在('completecaller','completeagent'),并且所有行的call_id都相同。

如果任何行中有动词 connect,则此调用将被应答,否则放弃。

以上查询返回所有放弃调用。同时也有接听电话。

以下是示例数据。

$

+-------+-----+------------+------------------+-------+----------------+-----------+----------------+-------+------+----------+------------------+-------+-------+-------+-----------+---------------------+
| id    | idd | time_id    | call_id          | queue | verb           | queuename | agent          | event | data | data1    | data2            | data3 | data4 | data5 | partition | created             |
+-------+-----+------------+------------------+-------+----------------+-----------+----------------+-------+------+----------+------------------+-------+-------+-------+-----------+---------------------+
| 41972 |   0 | 1567386039 | 1567386027.11981 | 4001  | DID            |           | NONE           |       |      | 63897811 |                  |       |       |       | P001      | 2019-09-02 09:00:39 |
| 41973 |   0 | 1567386039 | 1567386027.11981 | 4001  | ENTERQUEUE     |           | NONE           |       |      |          | 63038768         | 1     |       |       | P001      | 2019-09-02 09:00:39 |
| 41974 |   0 | 1567386049 | 1567386027.11981 | 4001  | CONNECT        |           | SIP/135        |       |      | 10       | 1567386039.11982 | 10    |       |       | P001      | 2019-09-02 09:00:50 |
| 41975 |   0 | 1567386095 | 1567386027.11981 | 4001  | COMPLETEAGENT  |           | SIP/135        |       |      | 10       | 46               | 1     |       |       | P001      | 2019-09-02 09:01:35 |
| 41976 |   0 | 1567386104 | 1567386092.11985 | 4003  | DID            |           | NONE           |       |      | 63897815 |                  |       |       |       | P001      | 2019-09-02 09:01:44 |
| 41977 |   0 | 1567386104 | 1567386092.11985 | 4003  | ENTERQUEUE     |           | NONE           |       |      |          | 63045831         | 1     |       |       | P001      | 2019-09-02 09:01:44 |
| 41978 |   0 | 1567386107 | 1567386095.11986 | 4004  | DID            |           | NONE           |       |      | 63897817 |                  |       |       |       | P001      | 2019-09-02 09:01:47 |
| 41979 |   0 | 1567386107 | 1567386095.11986 | 4004  | ENTERQUEUE     |           | NONE           |       |      |          | 67379922         | 1     |       |       | P001      | 2019-09-02 09:01:47 |
| 41980 |   0 | 1567386109 | 1567386092.11985 | 4003  | CONNECT        |           | Christine Nah  |       |      | 5        | 1567386104.11987 | 4     |       |       | P001      | 2019-09-02 09:01:49 |
| 41981 |   0 | 1567386116 | 1567386095.11986 | 4004  | CONNECT        |           | Helen Ang      |       |      | 9        | 1567386107.11990 | 9     |       |       | P001      | 2019-09-02 09:01:56 |
| 41982 |   0 | 1567386147 | 1567386095.11986 | 4004  | COMPLETEAGENT  |           | Helen Ang      |       |      | 9        | 31               | 1     |       |       | P001      | 2019-09-02 09:02:27 |
| 41983 |   0 | 1567386155 | 1567386092.11985 | 4003  | COMPLETECALLER |           | Christine Nah  |       |      | 5        | 46               | 1     |       |       | P001      | 2019-09-02 09:02:35 |
| 41984 |   0 | 1567386254 | 1567386242.11999 | 4002  | DID            |           | NONE           |       |      | 63897813 |                  |       |       |       | P001      | 2019-09-02 09:04:14 |
| 41985 |   0 | 1567386254 | 1567386242.11999 | 4002  | ENTERQUEUE     |           | NONE           |       |      |          | 66438001         | 1     |       |       | P001      | 2019-09-02 09:04:14 |
| 41986 |   0 | 1567386255 | 1567386243.12000 | 4002  | DID            |           | NONE           |       |      | 63897813 |                  |       |       |       | P001      | 2019-09-02 09:04:15 |
| 41987 |   0 | 1567386255 | 1567386243.12000 | 4002  | ENTERQUEUE     |           | NONE           |       |      |          | 62168443         | 2     |       |       | P001      | 2019-09-02 09:04:15 |
| 41988 |   0 | 1567386266 | 1567386242.11999 | 4002  | CONNECT        |           | Catherine Chia |       |      | 12       | 1567386254.12001 | 12    |       |       | P001      | 2019-09-02 09:04:26 |
| 41989 |   0 | 1567386270 | 1567386243.12000 | 4002  | RINGNOANSWER   |           | Team 2 142     |       |      | 15000    |                  |       |       |       | P001      | 2019-09-02 09:04:30 |
| 41990 |   0 | 1567386279 | 1567386243.12000 | 4002  | CONNECT        |           | Jace Yeo       |       |      | 24       | 1567386275.12007 | 4     |       |       | P001      | 2019-09-02 09:04:39 |
| 41991 |   0 | 1567386292 | 1567386242.11999 | 4002  | COMPLETEAGENT  |           | Catherine Chia |       |      | 12       | 26               | 1     |       |       | P001      | 2019-09-02 09:04:52 |
+-------+-----+------------+------------------+-------+----------------+-----------+----------------+-------+------+----------+------------------+-------+-------+-------+-----------+---------------------+
$

and expected results here below

+------------------+----------+--------+-------+------+-------+
| call_id          | did      | status | queue | verb | agent |
+------------------+----------+--------+-------+------+-------+
| 1567386027.11981 | 63897811 | Missed | 4001  | DID  | NULL  |
| 1567386092.11985 | 63897815 | Missed | 4003  | DID  | NULL  |
| 1567386095.11986 | 63897817 | Missed | 4004  | DID  | NULL  |
| 1567386242.11999 | 63897813 | Missed | 4002  | DID  | NULL  |
| 1567386243.12000 | 63897813 | Missed | 4002  | DID  | NULL  |
| 1567386337.12010 | 63897813 | Missed | 4002  | DID  | NULL  |
+------------------+----------+--------+-------+------+-------+


最佳答案

您的示例数据问题和预期结果与我不符。我的猜测是,总是有 1 个连接,但可能有多个连接或没有连接。稍微修改您的示例数据

drop table if exists t;
create table t
( id int, idd int, time_id  varchar(20), call_id varchar(30), queue int, verb varchar(20), queuename varchar(20), agent varchar(20),
 event varchar(20), data varchar(20), data1  varchar(20),   data2 varchar(20), data3 varchar(20),
  data4 varchar(20), data5 varchar(20), `partition` varchar(20), created datetime);
insert into t values
( 41972 ,   0 , '1567386039' , '1567386027.11981' , 4001  , 'DID'            ,null , 'NONE'           ,null  ,null , '63897811' , null               ,null   ,null   ,null , 'p001'    , '2019-09-02 09:00:39') ,
( 41973 ,   0 , '1567386039' , '1567386027.11981' , 4001  , 'ENTERQUEUE'     ,null , 'NONE'           ,null  ,null ,null        , '63038768'         , '1'   ,null   ,null , 'p001'    , '2019-09-02 09:00:39') ,
( 41974 ,   0 , '1567386049' , '1567386027.11981' , 4001  , 'CONNECT'        ,null , 'SIP/135'        ,null  ,null , '10'       , '1567386039.11982' , '10'  ,null   ,null , 'p001'    , '2019-09-02 09:00:50') ,
( 41975 ,   0 , '1567386095' , '1567386027.11981' , 4001  , 'COMPLETEAGENT'  ,null , 'SIP/135'        ,null  ,null , '10'       , '46'               , '1'   ,null   ,null , 'p001'    , '2019-09-02 09:01:35') ,
( 41976 ,   0 , '1567386104' , '1567386092.11985' , 4003  , 'DID'            ,null , 'NONE'           ,null  ,null , '63897815' , null               ,null   ,null   ,null , 'p001'    , '2019-09-02 09:01:44') ,
( 41977 ,   0 , '1567386104' , '1567386092.11985' , 4003  , 'ENTERQUEUE'     ,null , 'NONE'           ,null  ,null ,null        , '63045831'         , '1'   ,null   ,null , 'p001'    , '2019-09-02 09:01:44') ,
( 41978 ,   0 , '1567386107' , '1567386095.11986' , 4004  , 'DID'            ,null , 'NONE'           ,null  ,null , '63897817' , null               ,null   ,null   ,null , 'p001'    , '2019-09-02 09:01:47') ,
( 41979 ,   0 , '1567386107' , '1567386095.11986' , 4004  , 'ENTERQUEUE'     ,null , 'NONE'           ,null  ,null ,null        , '67379922'         , '1'   ,null   ,null , 'p001'    , '2019-09-02 09:01:47') ,
( 41980 ,   0 , '1567386109' , '1567386092.11985' , 4003  , 'CONNECT'        ,null , 'Christine Nah'  ,null  ,null , '5'        , '1567386104.11987' , '4'   ,null   ,null , 'p001'    , '2019-09-02 09:01:49') ,
( 41981 ,   0 , '1567386116' , '1567386095.11986' , 4004  , 'CONNECT'        ,null , 'Helen Ang'      ,null  ,null , '9'        , '1567386107.11990' , '9'   ,null   ,null , 'p001'    , '2019-09-02 09:01:56') ,
( 41982 ,   0 , '1567386147' , '1567386095.11986' , 4004  , 'COMPLETEAGENT'  ,null , 'Helen Ang'      ,null  ,null , '9'        , '31'               , '1'   ,null   ,null , 'p001'    , '2019-09-02 09:02:27') ,
( 41983 ,   0 , '1567386155' , '1567386092.11985' , 4003  , 'COMPLETECALLER' ,null , 'Christine Nah'  ,null  ,null , '5'        , '46'               , '1'   ,null   ,null , 'p001'    , '2019-09-02 09:02:35') ,
( 41984 ,   0 , '1567386254' , '1567386242.11999' , 4002  , 'DID'            ,null , 'NONE'           ,null  ,null , '63897813' , null               ,null   ,null   ,null , 'p001'    , '2019-09-02 09:04:14') ,
( 41985 ,   0 , '1567386254' , '1567386242.11999' , 4002  , 'ENTERQUEUE'     ,null , 'NONE'           ,null  ,null ,null        , '66438001'         , '1'   ,null   ,null , 'p001'    , '2019-09-02 09:04:14') ,
( 41986 ,   0 , '1567386255' , '1567386243.12000' , 4002  , 'DID'            ,null , 'NONE'           ,null  ,null , '63897813' , null               ,null   ,null   ,null , 'p001'    , '2019-09-02 09:04:15') ,
( 41987 ,   0 , '1567386255' , '1567386243.12000' , 4002  , 'ENTERQUEUE'     ,null , 'NONE'           ,null  ,null ,null        , '62168443'         , '2'   ,null   ,null , 'p001'    , '2019-09-02 09:04:15') ,
( 41988 ,   0 , '1567386266' , '1567386242.11999' , 4002  , 'CONNECT'        ,null , 'Catherine Chia' ,null  ,null , '12'       , '1567386254.12001' , '12'  ,null   ,null , 'p001'    , '2019-09-02 09:04:26') ,
( 41989 ,   0 , '1567386266' , '1567386242.11999' , 4002  , 'CONNECT'        ,null , 'abc'            ,null  ,null , '12'       , '1567386254.12001' , '12'  ,null   ,null , 'p001'    , '2019-09-02 09:04:26') ,
( 41990 ,   0 , '1567386270' , '1567386243.12000' , 4002  , 'RINGNOANSWER'   ,null , 'Team 2 142'     ,null  ,null , '15000'    , null               ,null   ,null   ,null , 'p001'    , '2019-09-02 09:04:30') ;
#( 41991 ,   0 , '1567386279' , '1567386243.12000' , 4002  , 'CONNECT'        ,null , 'Jace Yeo'       ,null  ,null , '24'       , '1567386275.12007' , '4'   ,null   ,null , 'p001'    , '2019-09-02 09:04:39') ,
#( 41992 ,   0 , '1567386292' , '1567386242.11999' , 4002  , 'COMPLETEAGENT'  ,null , 'Catherine Chia' ,null  ,null , '12'       , '26'               , '1'   ,null   ,null , 'p001'    , '2019-09-02 09:04:52');

我添加了一个到 1567386242.11999 的附加连接,并从 1567386243.12000 删除了连接。 此查询使用左连接将 did 连接到最近的连接。

select t.call_id,t.verb,t.data1,t.queue,
         case when s.verb is null then 'missed'
                else 'Answered'
         end as status,
         case when s.verb is not null then s.agent end as agent
from t
left join 
    (select t.*
    from t
    where id = (select max(id) from t t1 where t1.call_id = t.call_id and t1.verb = 'connect')
    ) s on s.call_id = t.call_id
where t.verb = 'did';

+------------------+------+----------+-------+----------+---------------+
| call_id          | verb | data1    | queue | status   | agent         |
+------------------+------+----------+-------+----------+---------------+
| 1567386027.11981 | DID  | 63897811 |  4001 | Answered | SIP/135       |
| 1567386092.11985 | DID  | 63897815 |  4003 | Answered | Christine Nah |
| 1567386095.11986 | DID  | 63897817 |  4004 | Answered | Helen Ang     |
| 1567386242.11999 | DID  | 63897813 |  4002 | Answered | abc           |
| 1567386243.12000 | DID  | 63897813 |  4002 | missed   | NULL          |
+------------------+------+----------+-------+----------+---------------+
5 rows in set (0.01 sec)

鉴于我对问题的理解,这是我所期望的

关于Mysql 查询没有给出 group by 的预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57865664/

相关文章:

python - Pandas Multiindex Groupby 聚合列与另一列的值

MySQL 多对多搜索

mysql - 如何在 mysql 存储过程中使用 case-when 语句?

PHP 数组包含太多元素

MySQL 唯一索引错误?

mysql - 查找并显示第二列条目全部重复的所有唯一 ID

mysql 如何按情况查询分组中返回的总行数

Mysql 在重复键更新时插入第一个空列

mysql - 在 Select 语句中使用 WHEN THEN 时,如何在 THEN 子句中添加多个变量

php - 上传多个图像并将每个图像路径存储在mysql数据库的不同列中