-1

我目前正在阅读考试学习书Querying Microsoft SQL Server 2012。过去几个月我一直在学习 SQL,目前正在研究窗口函数。我来到这个应用程序问题,它让我想到了另一个问题,我将在下面列出:

在此处输入图像描述

因此,在 diffprev 和 diffnext 列中,它只列出了前一个值和下一个值之间的差异。如何列出所有行(按 custid 分区)的后续值之间的最大差异?所以只是扫描表,我看到在 custid 1 的历史中,后续行之间的最大差异是 548 美元。那么对于 custid 2,最大的差异是 390.95 美元。我可以看到这些值出现在与分区有关的所有行的 maxdiff 列中。

谢谢你帮助我学习!

4

1 回答 1

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

如果您想要达到该最大值的行的详细信息,则需要做更多的工作。

额外提示 - 文字图片是最糟糕的。如果帮助的人不需要输入您的代码,您更有可能获得帮助。更好的是,如果是一个功能齐全的示例(包含表定义和示例数据),因此我们可以根据您的数据进行验证!

于 2015-08-18T03:57:33.093 回答