2015-12-02 54 views
0

我有每个小时选择MIN值的查询:每天从没有临时表的小时数MIN中选择一天的MIN?

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

现在我需要选择MIN和MAX为每个MIN(价格)。它应该很容易使用临时表,但我不知道如果性能明智,它会好的。有什么其他方法可以做到这一点?

回答

0

我以为你想找到这些价格的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 

子查询获取每天的最低价格,然后主查询仅限于匹配一天minprice记录。

+0

值得注意的是,由于性能被认为是一个问题,MySQL内部可能会创建一个临时表。如果不在前面的查询中显式创建和加载临时表,这是不可避免的。显式创建临时表允许包含有用的索引,内部版本不会有这种优化。 ......但是在你期望存在性能问题之前采取明确的路线可能被认为是不成熟的优化。 – Uueerdo