PostgreSQL -从简单座席状态表创建类似CDR的视图/表

o2gm4chl  于 2022-12-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(82)

我有一个表,我正尝试这样处理:
| 时间戳|代理人|州|
| - ------|- ------|- ------|
| 2022年11月10日05时00分01秒|史蒂夫|通话中|
| 2022年11月10日06时00分01秒|史蒂夫|等待|
| 2022年11月10日05时00分01秒|杰克|通话中|
| 2022年11月10日05时30分01秒|杰克|等待|
| 2022年11月10日07时00分01秒|史蒂夫|通话中|
基本上,我们有代理在呼叫中心,每当他们改变状态,状态的记录,发生变化的时间戳,以及代理的名字被记录到一个DB.为了在PowerBI中使用此数据,我需要改变它的显示方式.
我需要做的是将这些数据放入如下所示的视图中:
| 开始时间|结束时间|代理人|州|持续时间(s)|
| - ------|- ------|- ------|- ------|- ------|
| 2022年11月10日05时00分01秒|2022年11月10日06时00分01秒|史蒂夫|通话中|三六零零|
| 2022年11月10日05时00分01秒|2022年11月10日05时30分01秒|杰克|通话中|小行星1800|
| 2022年11月10日06时00分01秒|2022年11月10日07时00分01秒|史蒂夫|等待|三六零零|
因此,使用第一个表中的数据(我们知道结束时间,因为当代理更改为下一个状态时,我们可以使用它作为前一个状态的结束时间),我试图获得一个新的表或视图,用以下形式表示数据:

  • 他们的名字
  • 状态的开始和结束时间
  • 国家
  • 处于该状态的持续时间(秒)

我在思考如何对所有代理和数据执行此操作时遇到了一点麻烦。有人能为我提供一些指导,告诉我从哪里开始?

nx7onnlm

nx7onnlm1#

我需要做的是将这些数据放入如下所示的视图中:
当然可以。2顺序可能不是完全的顺序。3如果你想改变顺序,可以使用order by clause。
设置测试:

begin;
create temp table call(log_Timestamp timestamp,Agent text,  State text);
insert into call values
('2022/11/10 05:00:01',     'Steve'     ,'In Call')
,('2022/11/10 06:00:01',    'Steve'     ,'Waiting')
,('2022/11/10 05:00:01',    'Jack'  ,'In Call')
,('2022/11/10 05:30:01',    'Jack'  ,'Waiting')
,('2022/11/10 07:00:01',    'Steve'     ,'In Call');
commit;

查询:

CREATE VIEW call_view AS
WITH cte AS (
    SELECT
        c1.log_Timestamp AS start,
        lead(c1.log_Timestamp) OVER (PARTITION BY Agent ORDER BY log_Timestamp),
        EXTRACT(EPOCH FROM (lead(c1.log_Timestamp) OVER (PARTITION BY Agent ORDER BY log_Timestamp) - c1.log_Timestamp)),
        Agent,
        state
    FROM CALL c1 ORDER BY Agent,
    log_Timestamp
)
SELECT
    *
FROM
    cte
WHERE
    lead IS NOT NULL;

相关问题