1

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

4

1 回答 1

1
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

将是一种方式。

于 2012-07-08T15:24:59.440 回答