加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 用于计算运行平均列的SQL Select语句

发布时间:2020-12-12 16:23:29 所属栏目:MsSql教程 来源:网络整理
导读:我试图在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 ----- Avera
我试图在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行为null,因为之前没有行. “平均值”列中的第4行显示前3行中“数字”列的平均值.

我需要一些帮助来尝试构建一个将执行此操作的SQL Select语句.

解决方法

这应该这样做:
--Test Data
CREATE TABLE    RowsToAverage
    (
    ID int NOT NULL,Number int NOT NULL
    )

INSERT  RowsToAverage(ID,Number)
SELECT  1,1
UNION ALL
SELECT  2,3
UNION ALL
SELECT  3,2
UNION ALL
SELECT  4,4
UNION ALL
SELECT  5,6
UNION ALL
SELECT  6,8
UNION ALL
SELECT  7,10

--The query
;WITH   NumberedRows
AS
(
SELECT  rta.*,row_number() OVER (ORDER BY rta.ID ASC) AS RowNumber
FROM    RowsToAverage rta
)

SELECT  nr.ID,nr.Number,CASE
            WHEN nr.RowNumber <=3 THEN NULL
            ELSE (  SELECT  avg(Number) 
                    FROM    NumberedRows 
                    WHERE   RowNumber < nr.RowNumber
                    AND     RowNumber >= nr.RowNumber - 3
                )
        END AS MovingAverage
FROM    NumberedRows nr

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读