2016-09-27 4 views
0

グループ内の最後の値をグループ化して選択する方法がわかりません。複数のグループ内で最後の値を選択する(SQL Server)

この単純な表(以下の表のスニペット)は、チェックしている一連のURLが正しく応答しない場合のさまざまなタイムスタンプの値を保持しています。強調表示されている黄色の線は、キャプチャしようとしているデータを表しています。

Objective

基本的に私は、各グループの最後のダウンタイムのタイムスタンプを捕獲しようとしています。 failure_idは各エントリで自動インクリメントされます。

私は次のように部分的に成功んだ。その後、

WITH FAILURES AS 
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY url_id ORDER BY failure_id DESC) AS lastFail 
    FROM URL_FAILURES 
) 

し、そのデータと条件

WHERE 
    lastFail = 1 

と私の実際のSELECTステートメントを構築する...しかし、それはグループを無視私はlast_check_successのために必要です。


Microsoft SQL Server 2008 R2 (SP3) 
Database Compatibility: SQL Server 2005 

答えて

1

これは

WITH FAILURES AS 
    (
     SELECT *, ROW_NUMBER() OVER (PARTITION BY url_id ,last_check_success ORDER BY failure_id DESC) AS lastFail 
     FROM URL_FAILURES 
    ) 
+0

このような小さな調整 - それは修正です!ありがとうございます – Craig

1

これを試してみてください: を ( SELECT url_id、request_start、last_check_success、request_start BY last_check_success ORDER BY LAST_VALUE(failure_id)OVER(PARTITION AS障害に) FROM URL_FAILURES )

+0

私は以前のバージョンにロックされていましたが、LAST_VALUEはSQL Server 2012で導入されました。 – Craig

1

あなたの要件にLAST_VALUEを使用してください。

WITH FAILURES AS 
(
    SELECT *, LAST_VALUE(Failure_id) OVER (PARTITION BY url_id ,last_check_success ORDER BY Request_Start) AS lastFail 
    FROM URL_FAILURES 
) 
+0

LAST_VALUEはSQL Server 2012で導入されたのに対し、以前のバージョン – Craig

関連する問題