我有一个表格的格式是这样的(显然是简化的):
会话id
|
时间戳
|
行动
|
消息
|
4de88be3-2316-4efa-8e17-58a23655534d9
|
2:04
|
4363d58b-c9fe-43a1-b636-c65822329aa3
|
最初的
|
4de88be3-2316-4efa-8e17-58a23655534d9
|
2:05
|
d4294af-3英尺-4154-a3de-b2f9c05a0cf1
|
排队的
|
4de88be3-2316-4efa-8e17-58a23655534d9
|
2:10
|
dc40eaec-2aed-4b24-9b8e-f25194036
|
有联系的
|
4de88be3-2316-4efa-8e17-58a23655534d9
|
2:32
|
dd93f0d4-7db9-4a68-876b-956db9300841
|
挂断
|
注意到多个会话可能同时发生,当然,我正试图弄清楚如何编写查询以返回类似于以下的行:
会话id
|
最初的
|
有联系的
|
排队的
|
挂断
|
4de88be3-2316-4efa-8e17-58a23655534d9
|
2:04
|
2:05
|
2:10
|
2:32
|
我将更改其中的一些值,以显示持续时间和其他一些工作,但我似乎不知道如何获得一行使用多个其他行获取数据的初始输出(尤其是以一种有效的方式,我尝试在会话ID上进行for循环,这真的很慢)
我可以用编码语言在后台完成这项工作,让它将结果转储到临时表中,但如果可以创建这样的视图,我更喜欢这样。我整个上午都在用头撞桌子,试图弄清楚这一点。在我失去理智之前,只需要朝着正确的方向推动一下:)
非常感谢您的帮助
再次感谢@Andomar
我的最后一个查询结果是这样的,我现在可以使用它来构建KPI报告。我想我只需要离开这个问题几分钟,理清思路
select
session_id,
initial,
queued - initial as time_to_queue,
connected - queued as time_in_queue,
hangup - connected as time_in_call,
hangup - initial as total_time,
hangup
from
(SELECT
session_id,
MIN(CASE WHEN action = '4363d58b-c9fe-43a1-b636-c65822329aa3' THEN timestamp END) AS initial,
MIN(CASE WHEN action = 'd4294aaf-3fee-4154-a3de-b2f9c05a0cf1' THEN timestamp END) AS queued,
MIN(CASE WHEN action = 'dc40eaec-2aed-4b24-9b8e-ff1e25194036' THEN timestamp END) AS connected,
MIN(CASE WHEN action = 'dd93f0d4-7db9-4a68-876b-956db9300841' THEN timestamp END) AS hangup
FROM
cdr
where date(((timestamp at TIME zone 'UTC') at TIME zone 'US/Eastern')::timestamptz) >= '2023-12-07'
GROUP BY
session_id) x
where initial is not null --ignore outbound calls