2015-12-02 57 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