2017-01-20 9 views
0

Я пытаюсь найти максимальное значение в столбце и сохранить одно и то же значение до тех пор, пока не будет найдено следующее максимальное значение, а затем заменит его на новый, в SQL в качестве данных лежит в MS SQL ServerПроверка максимального значения в одном столбце и замена нового найденного максимума

алгоритм был бы в основном сохранить глобальную переменную для MaxDelay и сохранить перезаписи, что с новым макс или запустить два «для циклов» один для текущей строки и другой для строки -1, пока не будет найден следующий проект.

Должен ли я использовать сочетание рекурсивного запроса и funtion в SQL? Я пробовал Lag(), но я не могу использовать Max() функции Lag() из-за ограничения оконных функций.

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

Вау! Это было полезно. Благодарю. –

Смежные вопросы