2011-04-24 85 views
0

我有一個數據庫,我在MySQL中創建了1分鐘的股票價格。數據庫設置爲每個股票都有其自己的表格,其表格由包含日期,開盤,高點,低點,收盤點,交易量的符號命名。此外還有一個名爲Symbol的表格,其中包含Symbol,Type。數據庫的最終目標是能夠從一組符號中獲取一系列日期的價格。查詢從動態列表中選擇公共字段

此查詢適用於選擇從符號表符號的子集:

SELECT symbol 
FROM minute.symbols 
WHERE type = 'ETFs'; 

此查詢工作從單一的股票選擇日期的一個子集:

SELECT 'SPY', date, close 
FROM minute.SPY 
WHERE date > '2000-01-04 09:30:00' AND date <= '2000-01-04 10:00:00'; 

此查詢適用於從兩個股票選擇共同價格:

(SELECT 'SPY', date, close 
FROM minute.SPY 
WHERE date > '2000-01-04 09:30:00' AND date <= '2000-01-04 10:00:00' 
) 
UNION 
(SELECT 'QQQQ', date, close 
FROM minute.QQQQ 
WHERE date > '2000-01-04 09:30:00' AND date <= '2000-01-04 10:00:00' 
) 

我希望能夠c將查詢#1和查詢#2組合成一個查詢以獲得如查詢#3的結果,但對於查詢#1返回的所有表。

這是可行和有效的,或者我應該動態地構建查詢#3,這可能導致100個UNION?

+0

你稱之爲「創建一個矩陣」更通常稱爲pivoting。在SQL中很難,通常用客戶端編程語言完成,比如PHP,Ruby或者ASP.NET – Andomar 2011-04-24 14:37:05

+0

雖然在SQL中做'pivot'會很好,但我想我可以在調用查詢的程序中做到這一點。所以我想我真的想弄清楚如何讓查詢#2在查詢#1返回的表上運行。此外,我想如果我需要做的外部的SQL旋轉我需要添加一個符號名稱字段到每個符號表或有一些方法來避免這種情況? – darckeen 2011-04-24 14:57:09

+0

是否有理由不將所有價格都包含在單個表格中,並附上一個額外的「庫存」列來分割它們?如果每隻股票都沒有自己的表格,這將會容易得多! – 2011-04-24 15:26:24

回答

0

您可以通過使用存儲過程來實現此目的。

  • 您將傳遞類型和日期範圍作爲參數。
  • 你會運行光標移到第一個表(符號)
  • 遍歷光標與Concat的
  • 最終幫助生成SQL字符串您查詢時所建,你做的準備和執行運行它