我正在尝试查找列中的最大值并保持相同的值,直到找到下一个最大值,如果找到则将其替换为新的,在SQL中,因为数据位于MS SQL Server中
算法基本上是为MaxDelay保留一个全局变量,并继续用新的max重写,或者用'for loops'重写一个用于当前行,另一个用于第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 窗口函数只能出现在SELECT或ORDER BY子句中。
如果有人能给我一些指示,我将不胜感激。
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 :(得分:3)
如果您想要累计最大值,请使用相应的函数。像这样:
select t.*,
max(delay) over (order by [Milestones], [Project Name]) as running_max
from dbo.[Scenario Testing with Previous Row] t;