全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SQL及关系型数据库数据分析
3644 10
2010-12-29
悬赏 20 个论坛币 已解决
现在有一个数据表A,储存若干股票的日收盘信息。字段规定如下:

序号列名中文名称类型空否备注
1IDIDdecimal(18,0)  
2InnerCode证券内部编码int  
3TradingDay交易日smalldatetime  
4PrevClosePrice昨收盘smallmoney 
5OpenPrice今开盘smallmoney 
6HighPrice最高价smallmoney 
7LowPrice最低价smallmoney 
8ClosePrice收盘价smallmoney 
9TurnoverVolume成交量decimal(20,0) 
10TurnoverValue成交金额(元)decimal(20,0) 
11TurnoverDeals成交笔数int 
12XGRQ更新时间datetime  



现在我想在这个表的基础上生成一个新表,新表保留旧表id、innerCode、TradingDay字段,但是需要新增每只股票每一天的百日新高、新低(Day100Max,Day100Min)与250日新高、新低(Day250Max, Day250Min),请问这个功能用Sql如何实现?谢谢。

最佳答案

lyfyb99 查看完整内容

不用SQL更方便: %macro test; data aa1; set a; %do i=1 %to 99; high&i=lag&i(highprice); low&i=lag&i(lowprice); %end; day100max=max(of highprice high1-high99); day100min=min(of lowprice low1-low99); run; %mend test; %test;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2010-12-29 11:21:14
不用SQL更方便:
%macro test;
data aa1;
set a;
%do i=1 %to 99;
high&i=lag&i(highprice);
low&i=lag&i(lowprice);
%end;
day100max=max(of  highprice  high1-high99);
day100min=min(of  lowprice  low1-low99);
run;
%mend test;
%test;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-12-29 11:26:28
1# 马甲1号

问题补充:所谓“100日”,“250日”是指交易日,而不是自然日。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-12-30 15:08:32
能够实现.. 就是SQL比较复杂
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-12-30 15:49:31
给一个思路:  先限制旧表的时间选取范围(最近一年),然后按照时间倒序排序,取rank=100和rank=250得到100个交易日的初始时间和250个交易日的初始时间,然后统计各自时间范围内的新高、新低即可,至于这个思路的sql效率还有待考虑。主要是用来解决100个交易日和250个交易日问题
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2010-12-30 16:14:10
5# lyfyb99

如果能用sas就好了。Thanks anyway。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群