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