我正在尝试优化一个查询,我得出的结论是顺序无关紧要。所以我试图删除 ORDER BY
在以下情况下:
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% 的数据。
最佳答案
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 - 不排序的组顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11384052/