【发布时间】:2009-05-26 15:32:07
【问题描述】:
我试图在 SELECT 语句中根据同一 SELECT 语句中前 n 行中的一列创建一个运行平均列。我需要的平均值基于结果集中的前 n 行。
让我解释一下
Id Number Average
1 1 NULL
2 3 NULL
3 2 NULL
4 4 2 <----- Average of (1, 3, 2),Numbers from previous 3 rows
5 6 3 <----- Average of (3, 2, 4),Numbers from previous 3 rows
. . .
. . .
Average 列的前 3 行为空,因为没有之前的行。 Average 列中的第 4 行显示前 3 行的 Number 列的平均值。
我需要一些帮助来尝试构建一个可以执行此操作的 SQL Select 语句。
【问题讨论】:
-
你用的是什么SQL数据库?
-
我认为这是游标最快的极少数情况之一......只需将最后 3 行保留在 vars 中......
-
@sambo99 - 实际上,有很多方法可以以基于集合的方式执行此操作,对于任何大型数据集,它们通常比使用光标更快
-
任何基于集合的解决方案都必须进行自连接,如果您只想在我怀疑光标是唯一方法时运行数据。
-
游标在这里可能不是一个好的选择,因为需要“前 n 行的平均值”。这里,n 可以是任意数字。
标签: sql-server tsql sql-server-2008 aggregate