You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按Wrap Up Code分组呼叫数据遇阻,求SQL解决方案

解决呼叫数据按Wrap Up Code分组的问题

我明白你的困扰了——同一通呼叫里的Interact、hold、wrap段本来是关联的,但因为前两个的wrapUpCode是NULL,导致分组时被单独分开,没法归到对应Wrap Up Code的组里。咱们来调整一下SQL逻辑,把同一conversationId下的NULL值统一替换成该呼叫对应的有效Wrap Up Code。

核心思路

同一通呼叫(相同conversationId)里,只有wrap类型的段会有非NULL的wrapUpCode,其他段的都是NULL。我们可以用窗口函数先为每个conversationId提取出对应的非NULL Wrap Up Code,再用这个值统一替换该呼叫所有行的wrapUpCode,之后再进行分组,就能把所有关联段归到同一组了。

修改后的SQL代码

WITH NormalizedConversations AS (
    SELECT 
        direction,
        conversationId,
        username,
        conversationStart,
        -- 提取同一通话的有效Wrap Up Code,自动忽略NULL
        MAX(wrapUpCode) OVER (PARTITION BY conversationId) AS normalized_wrap_up_code,
        DATEDIFF_BIG(MILLISECOND, segmentStart, segmentEnd) AS duration
    FROM dbo.vw_Conversations
    WHERE 
        (purpose = 'user' OR purpose = 'agent') 
        AND segmentType <> 'alert'
)
SELECT TOP 1000
    direction,
    conversationId,
    username,
    conversationStart,
    normalized_wrap_up_code AS wrapUpCode,
    -- 如果需要合并同一通话的总时长就用SUM,保留单段时长就去掉SUM直接用duration
    SUM(duration) AS total_duration
FROM NormalizedConversations
GROUP BY 
    direction,
    conversationId,
    username,
    conversationStart,
    normalized_wrap_up_code;

代码说明

  1. CTE部分:用MAX(wrapUpCode) OVER (PARTITION BY conversationId)为每个通话生成统一的Wrap Up Code——因为NULL在聚合函数中会被忽略,所以这个表达式会自动拿到该通话里唯一的非NULL Wrap Up Code。
  2. 分组部分:用归一化后的normalized_wrap_up_code代替原来的wrapUpCode进行分组,这样同一通话的所有段都会被归到同一个Wrap Up Code组里。
  3. 时长处理:如果需要统计同一通话的总时长,就用SUM(duration);如果要保留每个段的单独时长,去掉SUM和对应的GROUP BY里的duration即可(此时不需要GROUP BY,直接SELECT即可)。

这样调整后,就能得到你想要的“把NULL值归到对应SegmentType最终结果”的效果啦!

内容的提问来源于stack exchange,提问作者Pinch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:30:35