首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调整Informix查询(Cisco Call Data Agent State)

调整Informix查询(Cisco Call Data Agent State)
EN

Stack Overflow用户
提问于 2015-06-03 12:58:41
回答 1查看 199关注 0票数 0

看来我已经走到了死胡同。我正在从Informix数据库(cisco呼叫中心数据)中提取数据,并试图编写一个查询,显示每个代理状态的持续时间。表中有4列(Agentstatedetail)我要从中提取: agentid、eventdatetime、eventtype和reasoncode。查询的目标是获取每个事件类型的持续时间。查询运行良好,但是有一个主要缺陷。当代理状态(对于同一代理程序)同时发生(下一个事件类型的事件时间相同)时,我的查询返回重复,因为在我的子查询中我有eventdatetime>asd1.eventdatetime。基本上,我需要创建第二个事件时列,并将每一行向上移动1,其中是agentid=agentid。然而,我尝试使用MIN函数,但是,正如我前面所述,这种逻辑是有缺陷的,因为有些事件同时发生。我已经在下面粘贴了我的代码。但是,我尝试创建一个索引表,因为我无法为我写入数据库,这不是一个选项。的另一种说法是,无论在哪里agentid=agentid?,任何建议都会非常有用,我该怎么说呢?谢谢!

PhotoLinks: https://goo.gl/photos/sqM8GYdDZLrD3jAAA:QueryOutcome https://goo.gl/photos/5E68jvwadjA5y5zZA:code即21理由代码=午餐

表模式: (agentID:状态已更改的代理的标识符,int,NULL,主键)

(eventDateTime:代理状态更改的日期和时间。日期-年份到分数(3),非空,主键)

(eventType:触发代理状态更改的事件: smallint,NULL,主键)

(如果没有配置原因代码,reasonCode: NULL,smallint,Null,主键)

代码语言:javascript
复制
select res.resourcename,

DATE(asd1.eventdatetime) as Date,
asd1.eventdatetime as starttime,
asd2.eventdatetime as endtime,
((asd2.eventdatetime-asd1.eventdatetime)::interval second(9) to second::char(10)::int) as duration,

   asd1.reasoncode as reasoncodenum

from agentstatedetail asd1

   join agentstatedetail asd2
   on asd1.agentid=asd2.agentid
     and asd2.eventdatetime = (select min(eventdatetime)
                               from agentstatedetail
                               where agentid = asd1.agentid
                               and eventdatetime>asd1.eventdatetime)
   left join resource res on asd1.agentid=res.resourceid

where asd1.agentid=asd2.agentid
EN

回答 1

Stack Overflow用户

发布于 2015-06-03 14:13:03

因此,给定的模式是:

代码语言:javascript
复制
create table agentstatedetail
  (
    agentid integer,
    eventdatetime datetime year to fraction(3),
    eventtype smallint,
    reasoncode smallint,
    primary key (agentid,eventdatetime,eventtype,reasoncode)
  );

只有下一个事件类型的

代码语言:javascript
复制
1   'Logged In' 
2   'Not Ready' 
3   'Ready' 
4   'Reserved' 
5   'Talking'
6   'Work' 
7   'Logged Out'

您不会报告事件类型之间的转换,即使持续时间是0秒。

问题是,当你有0秒的时候,你会得到重复的。

这些规则是否正确:

  • 登录后,您总是处于中,没有准备好
  • 未准备好之后,您总是在就绪中;
  • 就绪传递给而不是Ready之后,您必须先将保留为

如果所有这些规则都是正确的,下面的测试用例应该可以工作:

代码语言:javascript
复制
CREATE TABLE agentstatedetail (
    agentid         INT,
    eventtype       INT,
    eventdatetime   DATETIME YEAR TO FRACTION
);

INSERT INTO agentstatedetail VALUES (1, 1, CURRENT - 1 UNITS HOUR);
INSERT INTO agentstatedetail VALUES (1, 2, CURRENT);
INSERT INTO agentstatedetail VALUES (1, 3, CURRENT);
INSERT INTO agentstatedetail VALUES (1, 4, CURRENT + 1 UNITS HOUR);

SELECT
    t1.agentid                              AS agent_id,
    t1.eventtype                            AS src_event_type,
    t2.eventtype                            AS dst_event_type,
    t1.eventdatetime                        AS start_time,
    t2.eventdatetime                        AS stop_time,
    (t2.eventdatetime  - t1.eventdatetime ) AS durantion
FROM
    agentstatedetail t1 JOIN agentstatedetail t2
        ON  t1.agentid  = t2.agentid 
            AND t2.eventdatetime  = (
                SELECT MIN(eventdatetime )
                FROM agentstatedetail
                WHERE agentid  = t1.agentid 
                AND eventdatetime  >= t1.eventdatetime 
                AND NOT (
                        (t1.eventtype  = eventtype )
                    OR  (t1.eventtype  = 1 AND eventtype  = 3) 
                    OR  (t1.eventtype  = 3 AND eventtype  = 2)
                    OR  (t1.eventtype  = 2 AND eventtype  = 4)
                )
            )
WHERE
    NOT (
            (t1.eventtype  = t2.eventtype )
        OR  (t1.eventtype  = 1 AND t2.eventtype  = 3) 
        OR  (t1.eventtype  = 3 AND t2.eventtype  = 2)
        OR  (t1.eventtype  = 2 AND t2.eventtype  = 4)
    );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30620819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档