计算前7行SQL的平均值

时间:2019-09-13 08:00:48

标签: sql sql-server sql-server-2016

请考虑以下从存储过程返回的结果集:

enter image description here

IHD列的目标是对前6行(天)进行计算,以确定存储过程中的IHD值。

在这种情况下,只有从第7行开始才有IHD值,因为计算需要考虑前6天的期末余额,包括当日(第7天)并计算平均值。基本上,它需要使用行1到7作为行的7 IHD值。然后,要计算第8行的IHD值,需要使用第2到8行。

我看过SQL LAG函数,但这只允许我跳到上一行,而且我不确定我是否能够成功使用LAG函数一种自引用CTE,其中平均需要多于前一行。

我应该如何处理这种情况?

1 个答案:

答案 0 :(得分:6)

使用ROWS BETWEEN。没有消耗性的示例数据和预期的结果,我只能提供伪SQL,但这将使您走上正确的道路:

AVG({Your Column}) OVER ([PARTITION BY {Other Column}] ORDER BY {Column To Order BY}
                         ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)

很明显,如果不需要,请更换括号({})中的零件,并卸下括号([])中的零件。