根据提供的信息,我们可以深入探讨如何在MS SQL Server中实现任意间隔的移动平均线。移动平均线是一种常用的技术分析工具,在股票和其他金融市场中被广泛应用于预测价格趋势。在本例中,我们将通过创建一个存储过程来实现这一功能。 ### 标题解析:“SQL实现任意间隔的移动平均线” 此标题明确指出本文将介绍如何使用SQL(特别是MS SQL Server)来计算任意间隔的移动平均线。这里的“任意间隔”意味着用户可以自定义计算移动平均线时所采用的数据点数量。 ### 描述解析:“使用MS SQL 实现的任意间隔的移动平均线” 该描述进一步强调了使用的数据库平台是MS SQL Server,并且说明了主要目标是实现能够根据用户输入的不同间隔值来动态计算移动平均线的功能。 ### 标签解析 - **SQL**:指代所使用的编程语言。 - **股票**:表示该技术的应用场景,即股市分析。 - **移动平均线**:核心技术点,用于分析数据的趋势变化。 - **均线**:移动平均线的简称,与移动平均线同义。 ### 存储过程详解 下面是对所提供的部分代码的详细解释: #### 创建存储过程 ```sql CreateProc [dbo].[P_MoveAVGPrice] @AvgNumber int, @TableName varchar(8) ``` 这里定义了一个名为`P_MoveAVGPrice`的存储过程,它接受两个参数:`@AvgNumber`(整数类型)用于指定移动平均线的间隔长度;`@TableName`(字符串类型)则表示需要处理的数据表名称。 #### 内部逻辑 接下来,通过一系列操作实现了移动平均线的计算: 1. **创建临时表**:首先创建一个名为`#T_MoveAVG`的临时表,其中包含四个字段:`FRowNumber`(行号)、`FDay`(日期)、`FEnd`(收盘价)以及`FAVG`(移动平均值)。`FAVG`字段默认值为0,这是为了确保在计算移动平均之前所有的记录都有一个初始值。 ```sql CreateTable #T_MoveAVG ( FRowNumber int, FDay varchar(19), FEnd decimal(18,2), FAVG decimal(18,2) default(0) PRIMARY KEY (FRowNumber) ) ``` 2. **填充临时表**:使用`INSERT INTO`语句从指定的数据表中读取数据并按日期升序排序后填充到临时表中。 3. **设置游标**:定义一个名为`Avg_Cursor`的游标,用于遍历临时表中的每一条记录。 4. **计算移动平均**:对于每条记录,通过`SELECT AVG(FEnd)`语句计算其之后指定间隔内的平均值,并更新对应记录的`FAVG`字段。 5. **关闭游标**:当所有记录都处理完毕后,关闭并释放游标资源。 6. **处理特殊情况**:对于那些不足指定间隔长度的记录(即行号小于`@AvgNumber`的记录),将其`FAVG`字段设置为0。 7. **返回结果**:选择并返回处理后的临时表中的所有记录。 8. **清理资源**:删除临时表以释放内存空间。 通过上述步骤,我们成功地实现了任意间隔的移动平均线的计算。这种方法不仅适用于股票市场分析,还可以应用于其他需要进行趋势预测的场景。














AS
Declare @SqlString NVARCHAR(2000)
Set @SqlString = '
Create Table #T_MoveAVG
(
FRowNumber int,
FDay varchar(19),
FEnd decimal(18,2),
FAVG decimal(18,2) default(0)
PRIMARY KEY (FRowNumber)
)
Insert into #T_MoveAVG(FRowNumber, FDay, FEnd)
Select ROW_NUMBER()over(order by FDay ASC) FRowNumber, FDay, FEnd From '+ @TableName + '
Declare @RowNumber int, @Day varchar(19), @Avg decimal(18,2)
Declare Avg_Cursor Cursor For Select FRowNumber, FDay From #T_MoveAVG
OPEN Avg_Cursor;
FETCH NEXT FROM Avg_Cursor Into @RowNumber, @Day;
WHILE @@FETCH_STATUS = 0
BEGIN
Select @Avg = AVG(FEnd) From #T_MoveAVG Where @RowNumber >= FRowNumber
And FRowNumber > @RowNumber - ' + CONVERT(varchar(10), @AvgNumber) + '
Update #T_MoveAVG Set FAVG = @Avg Where FRowNumber = @RowNumber

- seusoftware2014-11-27通过游标实现的,不可取,非集合运算


- 粉丝: 2
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 单片机复习资料汇总整理.doc
- PLC的全自动洗衣机控制系统设计方案论文1.doc
- 从首因效应视角谈中职计算机应用基础教学.docx
- 论大数据背景下企业人力资源绩效管理创新.docx
- 试论自动化仪表安装工程进场前的注意事项.docx
- 上半软考网络工程师真题.doc
- 单片机遥控系统设计方案.doc
- 使用 PyQt 构建 YOLOV5 目标检测界面
- 云计算服务向纵深发展.docx
- 数字图像处理实验matlab4.doc
- 我国B2C电子商务物流存在的问题及对策.doc
- [资料]第2章--超文本标记措辞HTML.ppt
- 行政事业单位财务管理信息化建设问题分析.docx
- 基于51单片机电子密码锁方案设计书555.doc
- 机器人人工智能科技项目发展报告PPT【ppt精选模板】.pptx
- 4.机电一体化计算机接口设计(上).ppt


