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

基于job_detail表生成事件状态统计的SQL查询请求

问题:根据任务执行记录统计事件状态

现有一张名为job_detail的表,字段及示例记录如下:

Evnt_name   event_job_nm   status   start_time   end_time
---------   ------------   ------   ----------   ----------
evnt_abc    evnt_abc_job1   C       02/04/2023   02/04/2023
evnt_abc    evnt_abc_job2   C       02/04/2023   02/04/2023
evnt_abc    evnt_abc_job3   C       02/04/2023   02/04/2023
evnt_abc    evnt_abc_job4   C       02/04/2023   02/04/2023
evnt_jkl    evnt_jkl_job1   C       02/04/2023   02/04/2023
evnt_jkl    evnt_jkl_job2   C       02/04/2023   02/04/2023
evnt_jkl    evnt_jkl_job3   C       02/04/2023   02/04/2023
evnt_jkl    evnt_jkl_job4   F       02/04/2023   02/04/2023
.............
evnt_xyz    evnt_xyz_job1   C       02/04/2023   02/04/2023
evnt_xyz    evnt_xyz_job2   F       02/04/2023   02/04/2023
evnt_xyz    evnt_xyz_job3   N       02/04/2023   02/04/2023
evnt_xyz    evnt_xyz_job4   N       02/04/2023   02/04/2023

状态含义:

  • C:已完成
  • F:失败
  • N:未启动

需求

每个事件对应4条任务记录,需编写SQL实现:

  • 若某事件下所有任务均成功(状态为C),则事件状态为C;
  • 若该事件下存在任意失败任务(状态为F),则事件状态为F;

输出格式要求:

Evnt_name    evnt_status
---------    -----------
evnt_abc       C
evnt_jkl       F
evnt_xyz       F

解决方案

以下提供两种常用的SQL写法,均能满足需求:

写法1:通过条件计数判断是否存在失败任务

SELECT 
    Evnt_name,
    CASE 
        WHEN SUM(CASE WHEN status = 'F' THEN 1 ELSE 0 END) > 0 THEN 'F'
        ELSE 'C'
    END AS evnt_status
FROM job_detail
GROUP BY Evnt_name;

写法2:利用字符排序优先级简化逻辑

由于字符排序中'F' > 'C' > 'N',直接取每个事件的最大状态值即可得到结果:

SELECT 
    Evnt_name,
    MAX(status) AS evnt_status
FROM job_detail
GROUP BY Evnt_name;

写法2更为简洁,但若后续状态编码规则发生变化,需重新确认字符排序逻辑是否适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:17:40