2011-04-24 86 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字符串您查询时所建,你做的准备和执行运行它