我正在尝试优化一个查询,我已经得出结论,顺序无关紧要。所以我试图在下面的场景中删除ORDER BY

SELECT item, price FROM supplydemand
    GROUP BY item
    ORDER BY timestamp ASC

现在的情况是:餐桌上的供不应求记录着各种商品的价格。对于每件商品,我有4或5种不同的价格,因此有不同的行。上面的查询给出了每件商品的“最旧”价格。分组是在item上完成的,升序的时间戳给了我最早的行。此查询工作正常。
我注意到,只要我有最旧的价格,我实际上并不关心返回的行是否被排序。所以我想摆脱ORDER BY。我试过的是:
SELECT item, price, timestamp FROM supplydemand
    GROUP BY item
    HAVING timestamp = MIN(timestamp)

上面的查询应该会产生相同的数据,除了未排序的数据。MIN中的HAVING必须依赖于GROUP,因此将每个分组项的时间戳与组中最早的时间戳进行比较。
问题
第二个查询返回更少的行。由于某种原因,第二个查询中缺少某些行,我无法找出原因。其余的行返回相同的价格,但我几乎丢失了20%的数据。

最佳答案

SELECT item, price, timestamp
FROM SupplyDemand
INNER JOIN (
    SELECT item, MIN(timestamp) AS minimumtimestamp FROM SupplyDemand
) AS minimums
ON minimums.item = SupplyDemand.item AND minimums.minimumtimestamp = supplydemand.timestamp

只有一个办法。

关于mysql - MySQL-不排序的组顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11384052/

10-09 00:34