2017-01-20 18 views
0

私は列の最大値を見つけようとしていて、次の最大値が見つかるまで同じ値を保持しようとしていますデータは、MS SQL Serverの同じ列の最大値を繰り返し確認し、新しい最大値で置き換えます

アルゴリズムであるように、新しい1、SQLでは基本的にMAXDELAYのグローバル変数を保持し、新しい最大または現在の行に1つの「ループは」2を実行し、行のために他であることを書き換える維持されるだろう-1次のプロジェクトが見つかるまで-1。

SQLで再帰的なクエリと関数を混在させて使うべきですか? Lag()を試しましたが、Lag()のMax()はウィンドウ関数の制限のために使用できません。

SELECT *, 
(select max(v) from (VALUES([Delay],Lag([Delay], 1) OVER(ORDER BY [Milestones], [Project Name])))as value(v)) as [MaxDate] 
FROM dbo.[Scenario Testing with Previous Row] 

エラー:誰かが私にいくつかのポインタを与えることができれば

Msg 4108, Level 15, State 1, Line 2 Windowed functions can only appear in the SELECT or ORDER BY clauses.

をお願い申し上げます。

Project Name Milestones Baseline Date Actual Date Delay Max Delay  Worst Case Date 
Project 1 MS_1 12/12/2016 15/12/2016 3 3 15/12/2016 
Project 1 MS_2 14/12/2016 16/12/2016 2 3 17/12/2016 
Project 1 MS_3 31/12/2016 09/01/2017 9 9 09/01/2017 
Project 1 MS_4 11/01/2017 12/01/2017 1 9 20/01/2017 
Project 1 MS_5 21/01/2017 24/01/2017 3 9 30/01/2017 
Project 1 MS_6 01/02/2017 15/02/2017 14 14 15/02/2017 
Project 1 MS_7 15/02/2017 16/02/2017 1 14 01/03/2017 
Project 1 MS_8 26/02/2017 26/02/2017 0 14 12/03/2017 
Project 1 MS_9 31/03/2017 31/03/2017 0 14 14/04/2017 
+0

質問を編集して、サンプル*と質問*をテキスト表として入力してください。各行の先頭に4つのスペースを入れると、データは整列します。 –

答えて

3

累積最大値を使用する場合は、適切な関数を使用します。

select t.*, 
     max(delay) over (order by [Milestones], [Project Name]) as running_max 
from dbo.[Scenario Testing with Previous Row] t; 
+0

うわー!それは参考になった。ありがとう。 –

関連する問題