gpt4 book ai didi

sql - 查询以在 SQL Server 中查找长时间运行的作业

转载 作者:行者123 更新时间:2023-12-02 21:25:45 25 4
gpt4 key购买 nike

select
j.name as 'JobName',
run_date,
run_time,
msdb.dbo.agent_datetime(run_date, run_time) as 'RunDateTime',
h.run_duration,
((run_duration/10000*3600 + (run_duration/100)%100*60 + run_duration%100 + 31 ) / 60)
as 'RunDurationMinutes'
From msdb.dbo.sysjobs j
INNER JOIN msdb.dbo.sysjobhistory h
ON j.job_id = h.job_id
where j.enabled = 1
AND
((run_duration/10000*3600 + (run_duration/100)%100*60 + run_duration%100 + 31 ) / 60) > 1

上面的 SQL 查询将获取所有需要一分钟以上的作业的列表。但它给出了一个巨大的 list ,我不想要全部。我只想要每项工作的最后 2 次运行。我尝试使用 top 2 和 order by desc 但它没有列出列表中的所有作业。我只想要每项工作的最后 2 次运行。

有什么建议吗?

最佳答案

ROW_NUMER()测距函数:

select * from (

select
j.name as 'JobName',
run_date,
run_time,
msdb.dbo.agent_datetime(run_date, run_time) as 'RunDateTime',
h.run_duration,
((run_duration/10000*3600 + (run_duration/100)%100*60 + run_duration%100 + 31 ) / 60)
as 'RunDurationMinutes',
ROW_NUMBER() OVER(PARTITION BY j.name ORDER BY msdb.dbo.agent_datetime(run_date, run_time) DESC) NROW
From msdb.dbo.sysjobs j
INNER JOIN msdb.dbo.sysjobhistory h
ON j.job_id = h.job_id
where j.enabled = 1
AND
((run_duration/10000*3600 + (run_duration/100)%100*60 + run_duration%100 + 31 ) / 60) > 1

) t where nrow < 3

为了让事情更清楚,我做了:

  • 向您的查询添加新列:

    ROW_NUMBER() OVER(PARTITION BY j.name ORDER BY msdb.dbo.agent_datetime(run_date, run_time) DESC) NROW

此列按 j.name 字段对所有记录进行分组,并按“RunDateTime”字段对每组进行编号。

  • 现在我们需要获取 NROW == 1 或 NROW == 2 的所有记录。我创建了子查询(不确定它是最佳解决方案)和 WHERE 条件

    从 ( ... ) t 中选择 *,其中 nrow < 3

关于sql - 查询以在 SQL Server 中查找长时间运行的作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24379466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com