MySQL - 不排序的组顺序

标签 mysql optimization

我正在尝试优化一个查询,我得出的结论是顺序无关紧要。所以我试图删除 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/

相关文章:

mysql - 计算不带小数的平均值

c++:有没有办法确保编译器调用两次相同的 const 方法得到相同的结果?

mysql - 使用 MySQL 创建跨多个表的评分算法

mysql - 返回到第一个数字的子串

c - 除了将其复制到内存位置或将其定义为静态之外,是否有一种方法可以监视正在运行的实时软件上的局部变量?

java - 如何找到二维数组中两个给定位置之间的中间位置

c++ - 在 GCC 4.1.1 中优化文件中单个函数的方法是什么?

ios - 通过创建 NSDictionary 优化功能

java - 获取 java.sql.SQLException : Operation not allowed after ResultSet closed ERROR while trying multiple queries

php - 如何使用内存缓存缓存 mysql_query?