窗口函数:从LAG()中查找最大值

时间:2015-08-17 20:19:50

标签: sql-server max windowing

我目前正在通过考试学习书查询Microsoft SQL Server 2012 。我在过去的几个月里一直在学习SQL,目前我正在研究窗口函数。我来到这个申请问题,它让我想到了另一个问题,我将在下面列出:

enter image description here

因此,在diffprev和diffnext列中,它仅列出了上一个值和下一个值之间的差异。我怎样才能列出所有行中后续值之间的最大差异(由custid分区)?所以只要扫描表格,我就会发现在custid 1的历史中,后续行之间的最大差异是548美元。然后对于custid 2,最大的差异是390.95美元。我可以看到这些值出现在与分区相关的所有行的maxdiff列中。

感谢您帮助我学习!

1 个答案:

答案 0 :(得分:1)

如果您只是寻找价值,这应该有效:

with cte as (
   select custid, val - lag(val) 
      over (partition by custid order by orderdate, orderid) as prevVal
   from Sales.OrderValues
)
select custid, max(abs(val))
from cte
group by custid

如果您想要达到最大值的行的详细信息,那么它将会更加有效。

奖金提示 - 文字图片最差。如果帮助您的人不需要输入您的代码,您就更有可能获得帮助。更好的是,虽然是一个功能齐全的示例(包括表格定义和示例数据),但我们可以根据您的数据进行验证!