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

SQL查询需求:获取满足状态与ASSIGNED动作条件的task全量数据

获取指定分配人的PROCESSING状态任务

针对你的需求,我整理了两种实用的SQL查询方案,你可以根据自己使用的数据库(比如MySQL、PostgreSQL、SQL Server等)来选择合适的写法:

方案一:使用窗口函数(推荐,简洁高效)

这种方法利用窗口函数ROW_NUMBER()给每个任务的ASSIGNED动作按时间倒序编号,取最新的那条(编号为1),再关联任务表筛选状态和指定邮箱:

SELECT t.*
FROM task t
JOIN (
    SELECT 
        task_id,
        action_details,
        ROW_NUMBER() OVER (PARTITION BY task_id ORDER BY action_datetime DESC) AS rn
    FROM task_action
    WHERE action_type = 'ASSIGNED'
) ta ON t.task_id = ta.task_id AND ta.rn = 1
WHERE t.status = 'PROCESSING'
    AND JSON_EXTRACT(ta.action_details, '$.assigned_to') = 'target_email@example.com';

说明:

  • ROW_NUMBER() OVER (PARTITION BY task_id ORDER BY action_datetime DESC):按任务ID分组,每组内按动作时间倒序给记录编号,最新的动作编号为1
  • JSON_EXTRACT(...):根据数据库的JSON函数语法调整,比如MySQL用JSON_EXTRACT,PostgreSQL可以用action_details ->> 'assigned_to',SQL Server用JSON_VALUE(ta.action_details, '$.assigned_to')
  • 替换'target_email@example.com'为你要匹配的目标邮箱

方案二:使用子查询获取最新动作时间

如果你的数据库不支持窗口函数,可以用这种方式,先找到每个任务的最新ASSIGNED动作时间,再关联筛选:

SELECT t.*
FROM task t
JOIN task_action ta ON t.task_id = ta.task_id
WHERE t.status = 'PROCESSING'
    AND ta.action_type = 'ASSIGNED'
    AND ta.action_datetime = (
        SELECT MAX(action_datetime)
        FROM task_action
        WHERE task_id = t.task_id AND action_type = 'ASSIGNED'
    )
    AND JSON_EXTRACT(ta.action_details, '$.assigned_to') = 'target_email@example.com';

说明:

  • 子查询(SELECT MAX(action_datetime) ...)用于获取当前任务的最新ASSIGNED动作时间
  • 同样注意JSON函数的语法要适配你的数据库类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:32:46