590
社区成员
发帖
与我相关
我的任务
分享
--如果上市公司名叫name,要从一个总表中得到各股票的均价,则
select name,
(select avg(close) from(select top 5 close from tb where name=a.name order by date desc)t) as MA5,
(select avg(close) from(select top 10 close from tb where name=a.name order by date desc)t) as MA10,
(select avg(close) from(select top 20 close from tb where name=a.name order by date desc)t) as MA20,
(select avg(close) from(select top 30 close from tb where name=a.name order by date desc)t) as MA30,
(select avg(close) from(select top 60 close from tb where name=a.name order by date desc)t) as MA60
from tb a
select
(select avg(close) from(select top 5 close from tb order by date desc)t) as MA5,
(select avg(close) from(select top 10 close from tb order by date desc)t) as MA10,
(select avg(close) from(select top 20 close from tb order by date desc)t) as MA20,
(select avg(close) from(select top 30 close from tb order by date desc)t) as MA30,
(select avg(close) from(select top 60 close from tb order by date desc)t) as MA60
--要用到你前面的rn
select class,name,date,
MA5=case when rn%5 = 0 then (select sum([close]) from (select top 5 [close] from data_RN a where a.name=b.name and a.date<=b.date order by a.date desc) c)/5
else null end,
MA10=case when rn%10 =0 then (select sum([close]) from (select top 10 [close] from data_RN a where a.name=b.name and a.date<=b.date order by a.date desc) c)/10
else null end,
MA20=case when rn%20 =0 then (select sum([close]) from (select top 20 [close] from data_RN a where a.name=b.name and a.date<=b.date order by a.date desc) c)/20
else null end,
MA30=case when rn%30 =0 then (select sum([close]) from (select top 30 [close] from data_RN a where a.name=b.name and a.date<=b.date order by a.date desc) c)/30
else null end,
MA60=case when rn%60 =0 then (select sum([close]) from (select top 60 [close] from data_RN a where a.name=b.name and a.date<=b.date order by a.date desc) c)/60
else null end
from data_RN b
--close是收盘价吗?换了个sql2000下的收盘价的算法,不知道对不对
select class,name,date,
MA5=(select top 5 [close] from data_RN a where a.name=b.name and a.date<=b.date order by a.date desc)/5,
MA10=(select top 10 [close] from data_RN a where a.name=b.name and a.date<=b.date order by a.date desc)/10,
MA20=(select top 20 [close] from a where a.name=b.name and a.date<=b.date order by a.date desc)/20,
MA30=(select top 30 [close from data_RN a where a.name=b.name and a.date<=b.date order by a.date desc)/30,
MA60=(select top 60 [close] from data_RN a where a.name=b.name and a.date<=b.date order by a.date desc)/60
from data_RN b
--再试试下面
select class,name,date,
MA5=(select sum([close]) from (select top 5 [close] from data_RN a where a.name=b.name and a.date<=b.date order by a.date desc) c)/5,
MA10=(select sum([close]) from (select top 10 [close] from data_RN a where a.name=b.name and a.date<=b.date order by a.date desc) c)/10,
MA20=(select sum([close]) from (select top 20 [close] from data_RN a where a.name=b.name and a.date<=b.date order by a.date desc) c)/20,
MA30=(select sum([close]) from (select top 30 [close] from data_RN a where a.name=b.name and a.date<=b.date order by a.date desc) c)/30,
MA60=(select sum([close]) from (select top 60 [close] from data_RN a where a.name=b.name and a.date<=b.date order by a.date desc) c)/60
from data_RN b