2011-02-09 21 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 

これまでのところは良いが、それは彼らがクエリまで走った回数に応じて、同じジョブのためのいくつかの結果を返す実行している:私のクエリは次のようです。これは良いことではありません。仕事ごとに1つの結果しか得られず、最新のものだけが必要です。私は、文字列を追加する場合

: 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のカラム2にカラム名が指定されていません" " –

+0

@Alex - 計算された列に 'ServerName'などと同じように明示的なエイリアスが与えられていることを確認する必要があります。 –

+0

ねえ!それはエイリアスを与えた後の魅力のように機能します。どうもありがとう。感謝! –

関連する問題