【问题标题】:MySql: variable row max min query?MySql:可变行最大最小查询?
【发布时间】:2012-06-17 21:50:36
【问题描述】:

我有一个包含股票报价(stock_symbol、quote_date、open_price、high_price、low_price、close_price)的 MySql 表,需要找出各种最大值和最小值:10/20/245/252 天的最高最高/最低最低。

我知道如何使用每个时期的 SELECT 查询来做到这一点:

SELECT max(high_price), min(low_price) FROM mytable WHERE stock_symbol = 'GOOG' ORDER BY quote_date DESC LIMIT 10;

是否可以使用单个 SELECT 语句来完成,而不会使数据库服务器的查询过于密集?单个 SELECT 语句会比多个 SELECT 语句执行得更好吗?

任何想法/帮助将不胜感激。谢谢!

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    最好在一个语句中执行此操作,但问题仅在于索引:确保在您询问最小值和最大值或在 where 子句中添加的所有列上都有一个索引:hight_price、low_price 和stock_symbol.

    有了索引,这个请求将是即时的,即使对于非常大的表并且没有你的LIMIT 10

    不要在这个查询中输入ORDER BY:它没有用,因为最小值和最大值是相同的,与您查看集合的顺序无关。

    您的查询应该是简单的

    SELECT max(high_price), min(low_price) FROM mytable WHERE stock_symbol = 'GOOG'
    

    如何创建索引:http://dev.mysql.com/doc/refman/5.0/en/create-index.html

    【讨论】:

    • 谢谢。那么,您是建议使用动态生成的行号使用单个语句还是有其他方法?
    • 为什么要行号?如果您要添加其他过滤器(例如,一个时期 - 过去 30 天),请将它们作为条件添加到 WHERE 子句中。
    猜你喜欢
    • 1970-01-01
    • 2016-01-12
    • 2013-04-26
    • 2015-06-22
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    相关资源
    最近更新 更多