Board logo

標題: 把五格的資料平均後寫在一個儲存格中(股票的五日均線) [打印本頁]

作者: joey0415    時間: 2010-6-20 21:45     標題: 把五格的資料平均後寫在一個儲存格中(股票的五日均線)

本帖最後由 joey0415 於 2010-6-21 08:26 編輯



如上表,小弟會把SQL_2008中的資料,撈出資料放在EXCEL中,並用EXCEL中計算收盤價的五日均線,聽朋友說,可以直接在SQL_2008 中,直接算出五日均線,請問一下,若在資料庫中計算的話,請問語法為何呢?

如果不行的話,若把資料撈出來在EXCEL中計算後,再放回資料庫中存放,這樣好嗎?
作者: PD961A    時間: 2010-6-28 11:40

回復 1# joey0415
GOOGLE回覆
http://www.mobile01.com/topicdetail.php?f=512&t=1611893&last=20372916
    1. 用 Select MAX(日期) from STOCK_AAA
就可以取得最後一天的日期。
所以組合起來就可以得到
Select * from STOCK_AAA where 日期=(Select MAX(日期) from STOCK_AAA)
2.
要取得前五天的日期集合
Select TOP 5 日期 from STOCK_AAA where 日期<= '2007/5/28' ORDER BY 日期 DESC
用最小值,就可以取到五天前的那個日期
SELECT MIN(日期) FROM (Select TOP 5 日期 from STOCK_AAA where 日期<= '2007/5/28' ORDER BY 日期 DESC)
再來用 between + 平均值
最後全部組合成一個 SQL
其實到這麼複雜,用 Storage Procedure 或 配合 VIEW 會比較簡單明瞭
作者: joey0415    時間: 2010-6-28 17:51

回復  joey0415
GOOGLE回覆
http://www.mobile01.com/topicdetail.php?f=512&t=1611893&last=20372916
...
PD961A 發表於 2010-6-28 11:40



    這也是我在別的網站貼過了,不過這位大大只回答一半,因為我除了要平均,還要整欄都是如此,如果用excel一下子就做完了,我只想看看sql的方法,結果會變如何!

謝謝
作者: kimbal    時間: 2010-7-4 13:32

本帖最後由 kimbal 於 2010-7-4 13:37 編輯

SELECT x.日期, AVG(y.最低) moving_average from
STOCK_DAY X, STOCK_DAY Y
where X.日期>= '2007-05-30'
AND x.日期 BETWEEN y.日期 AND dateadd(d,5,y.日期)
GROUP BY x.日期
ORDER BY x.日期

如果不想寫死'2007-05-30', 可用 (select MAX(日期) FROM (select TOP 5 日期 from STOCK_DAY ORDER BY 日期)) 代替

參考
http://oreilly.com/catalog/transqlcook/chapter/ch08.html
作者: joey0415    時間: 2010-7-6 11:42

SELECT x.日期, AVG(y.最低) moving_average from
STOCK_DAY X, STOCK_DAY Y
where X.日期>= '2007-05-3 ...
kimbal 發表於 2010-7-4 13:32


看樣子好像可以用,感謝分享




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)