作者wolf76er ( =资三连线= wolf)
看板Database
标题[SQL ] 取上一笔资料以及移动区间的问题
时间Wed Oct 10 23:28:09 2012
各位前辈好,最近刚学习SQL,碰到两个问题想请教
1.目前有做一个股价的table(stock_priced),大概有几个栏位:
STOCK_ID(证券码) ZDATE(日期) CLOSE_P(股价) CHG(涨跌)
现在需要计算的栏位是CHG(今日股价-前日股价)
目前写法是:
SELECT S.STOCK_ID, S.ZDATE, S.CLOSE_P-T.CLOSE_P AS CHG
FROM
(SELECT STOCK_ID, ZDATE,
ROW_NUMBER() OVER (PARTITION BY STOCK_ID ORDER BY ZDATE) AS ORD
FROM STOCK_PRICED) AS S
LEFT OUTER JOIN
(SELECT STOCK_ID, CLOSE_P,
ROW_NUMBER() OVER (PARTITION BY STOCK_ID ORDER BY ZDATE)+1 AS ORD
FROM STOCK_PRICED) AS T
ON S.STOCK_ID = T.STOCK_ID AND S.ORD = T.ORD
可是因为目前有千万笔左右的资料,所以上面的SQL执行大概要5分钟以上,
想请教有效率比较好的写法吗?
2.想请问关於移动区间的问题
目前同样有一个股价的table,栏位有:
证券码 日期 报酬率 近五日累计报酬率
需要计算的栏位是近五日累计报酬率
算法是抓最近5日的报酬率连乘(包含当天的报酬率)
目前想法是写function一次算一天的资料,
想请教有什麽比较好的方向可以改成一次可以计算一批日期的资料吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.240.168.108