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

如何通过SQL获取最后请求未被处理的client_id列表?

问题分析与SQL解决方案

需求明确

需要筛选出最后一次任务请求未被处理的client_id列表,判断规则:

  • 若客户的最后一条任务的created_datetime之后,存在任何call_datetime晚于该时间的通话记录,视为已处理
  • 反之(无后续通话,或根本没有通话记录),视为未处理

原SQL存在的问题

你提供的SQL存在几个核心逻辑错误:

  1. 使用JOIN会直接过滤掉没有通话记录的客户,但这类客户属于未处理范畴,应该被保留
  2. GROUP BY client_id, call_datetime分组逻辑错误,会按每个通话时间拆分分组,无法聚合客户的最后任务时间与最后通话时间
  3. 计算两个最大值的时间差对需求无意义,我们需要的是对比客户最后一次任务时间和其所有通话的最晚时间

正确SQL写法

SELECT t.client_id
FROM (
    -- 获取每个客户的最后一次任务创建时间
    SELECT client_id, MAX(created_datetime) AS last_task_time
    FROM tasks
    GROUP BY client_id
) t
LEFT JOIN (
    -- 获取每个客户的最后一次通话时间
    SELECT client_id, MAX(call_datetime) AS last_call_time
    FROM calls
    GROUP BY client_id
) c ON t.client_id = c.client_id
-- 筛选未处理的客户:无通话记录,或最后任务时间晚于最后通话时间
WHERE c.last_call_time IS NULL 
   OR t.last_task_time > c.last_call_time;

逻辑说明

  1. 子查询t:聚合每个客户的最后一次任务创建时间,确保我们只关注客户的最后一条请求
  2. 子查询c:聚合每个客户的最后一次通话时间,用LEFT JOIN保证没有通话记录的客户不会被过滤
  3. WHERE条件:精准匹配需求中的未处理场景,覆盖“无通话”和“有通话但最后任务在通话之后”两种情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:30:58