BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / database / #3792同步于 2009/9/3
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Database机器人发帖

请教一个sql语句

cm536
2009/9/3镜像同步3 回复
题目是这样的: 一个股价schema StockPrice (stockid, timeid, price) timeid 是开盘的第x天, 第x天的股价price可以通过where timeid =x 获得 如果某个股票价格: timeid price 5 10 6 12 7 14 那么两天内均价是: timeid 2-day moving average 6 11.0000000000000000 7 13.0000000000000000 现在需要输出15-day moving average,按照stockid升序排序 1.因为题目要求15天均价,所以前14天是没法求均价的,所有股票从第15天后开始求均价 2.如果某一天股价是null,那么那一天往后算的15天之内,求出的数据都放弃(少一天的值那么结果是不对的) 这个怎么用sql语句实现? 我初学数据库,还没掌握sql语句,想了很久思维比较混乱,请指教.
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
coolfantasy机器人#1 · 2009/9/3
对于 MA 的计算还是有一些逻辑在里面的,不建议把所有的工作都交给 DBMS 来完成 可以得到时间窗口的所有数据,然后由应用程序来完成计算 【 在 cm536 (电) 的大作中提到: 】 : 题目是这样的: : 一个股价schema StockPrice (stockid, timeid, price) : timeid 是开盘的第x天, 第x天的股价price可以通过where timeid =x 获得 : ...................
FlyBeast机器人#2 · 2009/9/4
----首先去掉price IS NULL 的记录,这样关联就不用判断为空的情况了 DELETE FROM StockPrice WHERE price IS NULL ; ----最开始的sql是这样的 SELECT T1.stockid ,T1.TIMEID ,(T1.PRICE + T2.PRICE +T3.PRICE ,+......T15.PRICE )/ 15 FROM StockPrice T1 ,StockPrice T2,StockPrice T3,....StockPrice T15 WHERE T1.TIMEID >= 15 AND T1.TIMEID = T2.TIMEID+1 AND T1.TIMEID = T3.TIMEID+2 ......... AND T1.TIMEID = T15.TIMEID+14 ----这样的笛卡尔积是一个很大的数,显然是难以接受的 ----于是只能逐步减小 ----先算一个3天的平均股价 INSERT INTO DAY3_StockPrice(stockid ,TIMEID,PRICE ) SELECT T1.stockid ,T1.TIMEID ,(T1.PRICE + T2.PRICE +T3.PRICE )/ 3 FROM StockPrice T1 ,StockPrice T2,StockPrice T3 WHERE T1.TIMEID >= 15 AND T1.TIMEID = T2.TIMEID+1 AND T1.TIMEID = T3.TIMEID+2 ----6日的平均股价就是这样的了 INSERT INTO DAY6_StockPrice(stockid ,TIMEID,PRICE ) SELECT T1.stockid ,T1.TIMEID ,(T1.PRICE + T2.PRICE )/ 2 FROM DAY3_StockPrice T1 ,DAY3_StockPrice T2 WHERE T1.TIMEID >= 15 AND T1.TIMEID = T2.TIMEID+3 ----9日的就是 INSERT INTO DAY9_StockPrice(stockid ,TIMEID,PRICE ) SELECT T1.stockid ,T1.TIMEID ,(6*T1.PRICE + 3*T2.PRICE )/ 9 FROM DAY6_StockPrice T1 ,DAY3_StockPrice T2 WHERE T1.TIMEID >= 15 AND T1.TIMEID = T2.TIMEID+6 ----12日和15日的往下类推 ----12日的可以用2个6日均的均值求得
hsb11322机器人#3 · 2009/9/4
写个存储过程