iT邦幫忙

0

SQL請益

sql

日前嘗試做一個股票系統,有一個功能是要從資料庫中抓出5天的每日成交量,我的資料是直接抓每日的所有股票,所以每一個table就是一天,於是我就打出了5次的連續inner join,想請問各路大神,有沒有更好的方法可以做出這個表

以下附上我寫的程式碼

SELECT stock_20200807.證券代號 AS STOCK_ID,
stock_20200807.成交股數 AS CAPACITY_1, stock_20200806.成交股數 AS CAPACITY_2,
stock_20200805.成交股數 AS CAPACITY_3, stock_20200804.成交股數 AS CAPACITY_4,
stock_20200803.成交股數 AS CAPACITY_5, stock_20200731.成交股數 AS CAPACITY_6
FROM (((((stock_20200807
INNER JOIN stock_20200806 on stock_20200807.證券代號 = stock_20200806.證券代號)
INNER JOIN stock_20200805 on stock_20200807.證券代號 = stock_20200805.證券代號)
INNER JOIN stock_20200804 on stock_20200807.證券代號 = stock_20200804.證券代號)
INNER JOIN stock_20200803 on stock_20200807.證券代號 = stock_20200803.證券代號)
INNER JOIN stock_20200731 on stock_20200807.證券代號 = stock_20200731.證券代號)

暐翰 iT邦大師 1 級 ‧ 2020-08-28 22:38:34 檢舉
依照你的例子,這SQL是OK的
另外補充 : 通常我不會做成一天一個表格 , 這樣想動態篩選日期時 , 會很麻煩
thou9787 iT邦新手 5 級 ‧ 2020-08-29 00:32:05 檢舉
應該要做成一個股票代碼一個表格嗎,然後在最後加上日期?
1
richardsuma
iT邦大師 1 級 ‧ 2020-08-29 01:03:38
最佳解答

表格可以考慮有這些欄位:
日期, 證券代號, 成交股數
然後將所有日期的股票資料匯入到這個table
之後就隨你下SQL

看更多先前的回應...收起先前的回應...
thou9787 iT邦新手 5 級 ‧ 2020-08-29 01:52:25 檢舉

用日期跟證券代號做主鍵嗎

你可以用日期或證券代號作主鍵(主鍵只能有一個),其他可以建索引,看你是以日期為主去計算證券代號的成交股數,還是以證券代號為主去計算日期區間的成交股數。
索引可以是 日期+證券代號 與 證券代號+日期
另外百萬筆資料計算都是短暫的
你都可以試試看
祝 順利!

thou9787 iT邦新手 5 級 ‧ 2020-08-30 00:46:27 檢舉

再多問一個問題,我的table一共有,證券代號、成交股數、成交筆數、成交金額、開盤價、最高價、最低價、收盤價、漲跌......,如果這些欄位互相都沒有相依,符合正規化3NF的話,我不用再將它們拆開成不同的table了對嗎,還是分割成幾個相同類的table會好一些?
例如,成交金額、筆數之類的放一個table,最高價收盤價之類的放一個table
謝謝!

我的建是議不要為了正規化而正規化。
而且正規化也有它的時空背景,因為以前的硬碟非常貴,所以要怎麼樣節省儲存空間是一大學問。
當科技進步,儲存空間變得便宜,且BI及程式需要,是否一定要正規化,或是部分正規化,就必須考量你想要做什麼? 不是一定要正規化。
這麼說好了,你的table,證券代號應該是主key,而且每天的交易資訊都會有資料,所以這個table根本不需要再做正規化,否則你刻意正規化後,每個table都會有證券代號及交易日期,這樣子才能串聯你現在這些資訊。
要正規化是因為有些資訊不一定有,而你這些每天要交易的股票總不能每周才交易一天吧? 所以才說要清楚什麼要正規化。
這個應該算是主檔,如果你還有一個檔案是交易明細檔,然後交易明細檔裡面有交易人的姓名,這時候產生的交易人資料檔,才是被正規畫出來的table。
希望你可看的懂。
祝 智慧開展!

thou9787 iT邦新手 5 級 ‧ 2020-08-30 11:38:00 檢舉

非常感謝!

1
rogeryao
iT邦大師 6 級 ‧ 2020-08-28 23:18:39

所以每一個table就是一天 ??????
Google 一下 "sql 正規化"吧
可先參閱資料庫正規化

thou9787 iT邦新手 5 級 ‧ 2020-08-29 01:51:34 檢舉

這個pdf之前考試唸過無數遍 結果現在實作不知道怎麼起頭

1
ckp6250
iT邦研究生 2 級 ‧ 2020-08-29 10:45:47

每一個table就是一天

那10年後,不就3650個table , 怎麼管理啊?

我要發表回答

立即登入回答