2009-07-13 12 views
0

複数のホストで実行される特定の日次コマンドの結果をMS-SQLテーブルに記録するアプリケーションを継承しました。今度は、最後の結果の概要を得るためにホストごとに最後のログ行を表示するビュー/クエリを提供するように求められました。テーブルから一意のホストごとに最後のログ行を取得

テーブルは、このようになります。この場合

------------------------------ 
|HOST |LAST_RUN |RESULT | 
------------------------------ 
|SERVER1 |13-07-2009 |OK  | 
|SERVER2 |13-07-2009 |Failed | 
|SERVER1 |12-07-2009 |OK  | 
|SERVER2 |12-07-2009 |OK  | 
|SERVER3 |11-07-2009 |OK  | 
------------------------------ 

照会する出力:

------------------------------ 
|HOST |LAST_RUN |RESULT | 
------------------------------ 
|SERVER1 |13-07-2009 |OK  | 
|SERVER2 |12-07-2009 |Failed | 
|SERVER3 |11-07-2009 |OK  | 
------------------------------ 

...これらはホストのそれぞれの最後の行からです。

私が欠けている、それは単純なものであるかもしれないことを認識し、私はちょうど

おかげで、 マーク:-(それを得るように見えることはできません。

答えて

1

ここでは簡単ですバージョン:

SELECT lt.Host, lt.Last_Run, lt.Results 
from LogTable lt 
    inner join (select Host, max(Last_Run) Last_Run 
       from LogTable 
       group by Host) MostRecent 
    on MostRecent.Host = lt.Host 
    and MostRecent.Last_run = lt.Last_Run 

これは、ほとんどすべてのSQLシステムで動作するはずですSQL Server 2005または2008年のランキング関数は少し良く働くかもしれない

+0

ええ - これは私が考えていたもので、私のものより優れています。 –

+0

チャームのように働いた、ありがとう! – kathmann

1
Select Host, Last_Run, Result from 
(
    select ROW_NUMBER() OVER (PARTITION BY Host ORDER BY Last_Run DESC) AS row_number, 
    Host, Last_Run, Result from Table1 
) tempTable 
where row_number = 1 
+0

+1 ) –

+0

私はrow_number解も好きです。私の問題は、彼らが何をやっているのか理解するためには、いつも数分間彼らを見つめなければならないということです。それでも、それらは真剣に複雑なクエリ内で非常に便利です。 –

0
select host, max (last_run) from t group by host 

必要なホストとlast_runを取得します。それをしようとか、それを見ていないが、あなたのアイデアを得る - そして、

(select host as h, last_run as lr, result as r from t) inner join (select host as h_max, max (last_run) as lr_max from t group by host) on h=h_max, lr=lr_max 

がない場合は、正確な私のSQLを許して。

0

SERVER2のLAST_RUNの日付に誤植があると思います。

これは、サブクエリを使用することなく、他のすべての偉大な答えと同じ結果を提供します。

select t."HOST" 
     , t."LAST_RUN" 
     , t."RESULT" 
from yourtable t 
     left outer join yourtable t2 
     on t."HOST" = t2."HOST" 
    and 
     t2."LAST_RUN" > t."LAST_RUN" 
where t2."RESULT" is null; 

そして、結果セットは次のようになります(ROW_NUMBERを使用するため、

|HOST |LAST_RUN |RESULT | 
------------------------------ 
|SERVER1 |13-07-2009 |OK  | 
|SERVER2 |13-07-2009 |Failed | 
|SERVER3 |11-07-2009 |OK  | 
関連する問題