Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从动态表列表中选择公共字段的查询_Mysql_Sql - Fatal编程技术网

Mysql 从动态表列表中选择公共字段的查询

Mysql 从动态表列表中选择公共字段的查询,mysql,sql,Mysql,Sql,我在MySQL中创建了一个1分钟股价数据库。数据库的设置使每个股票都有自己的表,该表由包含日期、开盘、上盘、下盘、收盘和成交量的符号命名。还有一个名为symbols的表,其中包含Symbol、Type。该数据库的最终目标是能够从符号集合中获取一系列日期的价格 此查询用于从符号表中选择符号子集: SELECT symbol FROM minute.symbols WHERE type = 'ETFs'; 此查询用于从单个股票中选择日期子集: SELECT 'SPY', date, close

我在MySQL中创建了一个1分钟股价数据库。数据库的设置使每个股票都有自己的表,该表由包含日期、开盘、上盘、下盘、收盘和成交量的符号命名。还有一个名为symbols的表,其中包含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'
)
我希望能够将查询1和查询2合并到一个查询中,以获得类似查询3的结果,但是对于查询1返回的所有表


这是可行且有效的,还是我应该动态构建查询3,它可能会导致100个联合?

您可以通过使用存储过程来实现这一点

您可以将类型和日期范围作为参数传递。 您可以在第一个表符号上运行光标 在光标上循环并在Concat的帮助下构建SQL字符串 最后,当您构建了查询时,您可以使用Prepare和Execute来运行它
你所说的创建矩阵通常被称为旋转。这在SQL中很难实现,通常是用客户端编程语言完成的,比如PHP、Ruby或ASP.NetWe。虽然用SQL做“透视”很好,但我想我可以在调用查询的程序中实现。所以我想我真的想弄清楚如何让查询2在查询1返回的表上运行。另外,我想如果我需要在SQL之外进行数据透视,我需要在每个符号表中添加一个符号名称字段,或者有什么方法可以避免这种情况吗?有什么原因没有在一个表中包含所有价格,并使用一个额外的库存列来拆分它们?如果每只股票都没有自己的表,这将是非常容易的!是的,我最初试过,问题是填充表的速度非常慢。表pimary键为日期、符号。第一只股票需要1分钟上传,第十只股票因为索引需要10分钟。大约有250只股票,每只股票的行数通常超过100万行。