【问题标题】:Selecting MIN for a day from MIN(s) of hours without temp table?从没有临时表的 MIN(s) 小时中选择一天的 MIN?
【发布时间】:2016-03-07 05:46:33
【问题描述】:

我有一个查询每小时选择 MIN 值:

SELECT MIN(price), HOUR(timestamp), DATE(timestamp) 
FROM `scan` 
GROUP BY DATE(timestamp), HOUR(timestamp) 

现在我需要为每天的每个 MIN(价格)选择 MIN 和 MAX。使用临时表应该很容易,但我不确定性能是否可以。还有哪些制作方法?

【问题讨论】:

    标签: mysql max min temp-tables


    【解决方案1】:

    我假设您想找到这些价格的 MIN 和 MAX 小时(问题不是很清楚)。

    应该是这样的:

    SELECT DATE(ta.timestamp), ta.price, MIN(HOUR(ta.timestamp)), MAX(HOUR(ta.timestamp))
    FROM `scan` ta
    INNER JOIN (
        SELECT MIN(price) AS minprice, DATE(timestamp) AS day
        FROM `scan` 
        GROUP BY DATE(timestamp)
    ) tb 
    ON (tb.minprice = ta.price AND tb.day = DATE(ta.timestamp))
    GROUP BY DATE(ta.timestamp), ta.price
    

    子查询获取每天的最低价格,然后将主查询限制为匹配 day 和 minprice 的记录。

    【讨论】:

    • 值得注意的是,由于提到了性能问题,MySQL 内部可能会创建一个临时表。如果没有在前面的查询中显式创建和加载临时表,这是不可避免的。显式创建临时表允许包含有用的索引,内部版本不会有这样的优化。 ...但是在您预期会出现性能问题之前走明确的路线可能被认为是过早的优化。
    猜你喜欢
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    相关资源
    最近更新 更多