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

如何查询Oracle中各调度作业的最后运行时间及状态

问题分析与修正方案

你的查询存在两个明显问题:

  1. 字段拼写错误:staus 应为 status
  2. 分组逻辑违规:按 job_name 分组后,status 既不在分组字段列表中,也未使用聚合函数,不符合SQL分组查询的语法规则,会直接报错。

正确查询写法

方法一:窗口函数(推荐)

利用ROW_NUMBER()按作业分组,再按运行时间倒序排序,取每个组的第一条记录,就是该作业最后一次运行的完整数据:

SELECT job_name, status, req_start_date
FROM (
    SELECT 
        job_name, 
        status, 
        req_start_date,
        ROW_NUMBER() OVER (PARTITION BY job_name ORDER BY req_start_date DESC) AS rn
    FROM all_scheduler_job_run_details 
    WHERE owner='ALI'
) t
WHERE rn = 1;

方法二:关联子查询

先提取每个作业的最新运行时间,再关联原表匹配对应状态:

SELECT a.job_name, a.status, a.req_start_date
FROM all_scheduler_job_run_details a
JOIN (
    SELECT job_name, MAX(req_start_date) AS max_start_date
    FROM all_scheduler_job_run_details 
    WHERE owner='ALI'
    GROUP BY job_name
) b ON a.job_name = b.job_name AND a.req_start_date = b.max_start_date
WHERE a.owner='ALI';

补充说明

  • 窗口函数写法更简洁高效,大表场景下性能更优
  • 若同一作业存在同一时间多次运行的情况,窗口函数会随机返回一条;如果需要保留所有同时间的记录,可将ROW_NUMBER()替换为RANK()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:55:32