2011-02-09 6 views
3

MSDB 데이터베이스에서 SQL Server 에이전트 작업 결과를 확인하는 쿼리에 대한 도움이 필요합니다.조인 된 결과에서 고유 한 결과 반환


SELECT CONVERT(VARCHAR(30), Serverproperty('ServerName')), 
     a.run_status, 
     b.run_requested_date, 
     c.name, 
     CASE c.enabled 
     WHEN 1 THEN 'Enabled' 
     ELSE 'Disabled' 
     END, 
     CONVERT(VARCHAR(10), CONVERT(DATETIME, Rtrim(19000101))+(a.run_duration * 
     9 + 
     a.run_duration % 10000 * 6 + a.run_duration % 100 * 10)/216e4, 108), 
     b.next_scheduled_run_date 
FROM (msdb.dbo.sysjobhistory a 
     LEFT JOIN msdb.dbo.sysjobactivity b 
      ON b.job_history_id = a.instance_id) 
     JOIN msdb.dbo.sysjobs c 
     ON b.job_id = c.job_id 
ORDER BY c.name 

지금까지 너무 좋아하지만, 그들이 쿼리 때까지 실행 한 횟수에 따라 동일한 작업에 대한 여러 결과를 반환 실행 : 내 쿼리는 다음과 같다. 이것은 좋지 않다. 나는 직업 당 오직 한 가지 결과 만 원한다. 나는 문자열을 추가하는 경우

: WHERE b.session_id = 그것은 잘 작동,하지만 그것은 단지 SESSION_ID 매개 변수에 따라 최신 작업을 나열 (MAX msdb.dbo.sysjobactivity에서 (SESSION_ID를) 선택). 이 작업은 잠시 동안 실행되지 않은 작업과 제외 된 작업을 제외시킵니다.

누군가가 도와 줄 수 있습니까? DISTINCT 및/또는 GROUP BY로 시도했지만 작동시키지 못했습니다.

+0

어떤 SQL Server 버전입니까? (이것은'ROW_NUMBER()'가 사용 가능한지를 결정합니다.) – AakashM

답변

1
with cte 
    AS (SELECT 
    Convert(varchar(30), SERVERPROPERTY('ServerName')) AS ServerName, 
    a.run_status, 
    b.run_requested_date, 
    c.name, 
    CASE c.enabled 
     WHEN 1 THEN 'Enabled' 
     Else 'Disabled' 
    END 
     AS Enabled, 
    CONVERT(VARCHAR(10), CONVERT(DATETIME, RTRIM(19000101))+(a.run_duration 
     * 9 + 
    a.run_duration % 10000 * 6 + a.run_duration % 100 * 10)/216e4, 108) 
     AS run_duration, 
    b.next_scheduled_run_date, 
    ROW_NUMBER() over (partition by b.job_id ORDER BY b.run_requested_date 
     DESC) AS RN 
     FROM (msdb.dbo.sysjobhistory a 
       LEFT JOIN msdb.dbo.sysjobactivity b 
        ON b.job_history_id = a.instance_id) 
       join msdb.dbo.sysjobs c 
        on b.job_id = c.job_id) 
SELECT * 
FROM cte 
WHERE RN = 1 
ORDER BY name 
+0

감사합니다, 이것은 잘 작동하지만 run_status 열의 CASE 절을 추가하면 "열 이름에 'cte'가 지정되지 않았습니다. . " –

+0

@Alex - 'ServerName'처럼 계산 된 모든 열에 명시적인 별칭이 지정되어 있는지 확인해야합니다. –

+0

안녕하세요! 별칭을 부여한 후 매력처럼 작동합니다. 매우 감사합니다. 감사! –

관련 문제