gpt4 book ai didi

SQL Server Lag 函数添加范围

转载 作者:行者123 更新时间:2023-12-05 04:12:06 25 4
gpt4 key购买 nike

您好,我是 SQL 的新手,希望有人能帮助我解决这个问题。我一直在这里和那里使用滞后函数,但想知道是否有办法重写它以使其进入总和范围。因此,我想将前 12 个月的每个时间段加在一起,而不是之前的一个月。我不想写 12 行滞后但想知道是否有办法用更少的代码行来获得它。请注意,会有空值,如果 12 条记录之一为空,则它应该为空。

enter image description here

我知道您可以编写子查询来执行此操作,但想知道这是否可行。任何帮助将非常感激。

最佳答案

您需要窗口函数的“窗口框架”部分。 12 个月的移动平均值如下所示:

select t.*,
sum(balance) over (order by period rows between 11 preceding and current row) as moving_sum_12
from t;

您可以在 documentation 中查看窗框.

如果你想要一个累加和,你可以完全忽略窗框。

我应该指出,您也可以使用 lag() 来执行此操作,但要复杂得多:

select t.*,
(balance +
lag(balance, 1, 0) over (order by period) +
lag(balance, 2, 0) over (order by period) +
. . .
lag(balance, 11, 0) over (order by period) +
) as sum_1112
from t;

这使用了鲜为人知的 lag() 的第三个参数,这是在记录不可用时使用的默认值。它取代了 coalesce()

编辑:

如果您想要 NULL,如果 12 个值不可用,则同时使用 casecount():

select t.*,
(case when count(*) over (order by period rows between 11 preceding and current row) = 12
then sum(balance) over (order by period rows between 11 preceding and current row)
end) as moving_sum_12
from t;

关于SQL Server Lag 函数添加范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41199647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com