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

PostgreSQL行式会话表查询求助:提取客户端发起的已回复会话

解决PostgreSQL会话合并问题

我来帮你搞定这个会话合并的需求!你的原SQL主要问题在于没准确区分用户和客户的消息方向,也没处理同一会话下多条客户消息的拼接,同时没过滤掉无回复或用户发起的会话。

正确的SQL解决方案

WITH client_messages AS (
    SELECT 
        client_id,
        user_id,
        string_agg(message, ' ' ORDER BY id) AS client_message
    FROM conversations
    WHERE incoming = True
    GROUP BY client_id, user_id
),
user_messages AS (
    SELECT 
        client_id,
        user_id,
        string_agg(message, ' ' ORDER BY id) AS user_message
    FROM conversations
    WHERE incoming = False
    GROUP BY client_id, user_id
)
SELECT 
    cm.client_id,
    cm.client_message,
    cm.user_id,
    um.user_message
FROM client_messages cm
INNER JOIN user_messages um 
    ON cm.client_id = um.client_id 
    AND cm.user_id = um.user_id;

代码解释

  • CTE client_messages: 分组收集每个client_id+user_id组合下所有来自客户的消息(incoming=True),用string_agg按消息id顺序拼接成一个字符串,保证消息的对话逻辑顺序。
  • CTE user_messages: 同理,收集每个组合下来自用户的回复消息(incoming=False),同样按id排序拼接。
  • INNER JOIN: 只保留同时存在客户消息和用户回复的会话——自动排除了无回复的会话(比如id5),也排除了用户发起的会话(比如id7、8,这类会话只有用户消息,不会出现在client_messages中)。

验证结果

执行这个SQL后,会完全匹配你期望的结果:

client_idclient_messageuser_iduser_message
1Hi, anybody there? I need help2Yes, I am here to help you.
2Did you solve it yet?5yes, it is solved

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:32:53