我想優化,我已經得出結論,該順序並不重要查詢。所以我想在以下情況下刪除ORDER BY
:MySQL的 - 組順序不排序
SELECT item, price FROM supplydemand
GROUP BY item
ORDER BY timestamp ASC
這裏是發生了什麼事情:表supplydemand跟蹤價格的各種物品。對於每個物品我有4或5個不同的價格,因此不同的行。上面的查詢爲我提供了每件商品的「最古老」價格。分組是在項目上完成的,升序時間戳給我最舊的一行。此查詢正常工作。
我發現只要我有最古老的代價,我真的不關心,如果返回的行進行排序。所以我想擺脫ORDER BY
。這是我已經嘗試過的:
SELECT item, price, timestamp FROM supplydemand
GROUP BY item
HAVING timestamp = MIN(timestamp)
上面的查詢應導致一個相同的數據,除非沒有排序。該MIN
內的HAVING
必須依靠GROUP
因此每個分組項的時間戳比較組內最古老的時間戳。
問題
第二個查詢返回的行較少。由於某些原因,第二個查詢中缺少某些行,我無法弄清楚原因。其餘的行返回相同的價格,但我錯過了近20%的數據。
'MIN(時間戳)'是全球整個表。 – 2012-07-08 15:03:30
然後我只收到1行左右。 MIN()運行在'GROUP',而不是全局 – Mikhail 2012-07-08 15:06:10
我開始懷疑我的*原*查詢其實是錯誤的。它先分組,然後分類,這不是我想要的 – Mikhail 2012-07-08 15:17:59