[SQL ] 取上一筆資料以及移動區間的問題
各位前輩好,最近剛學習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