我有一个应用程序可以跟踪各种产品的价格。对于任何特定产品,价格在任何一天的任何时间都可能会发生变化,并且不会定期更改。有一个PriceHistory表格记录了产品的所有价格随时间变化的记录。应用程序用户可以选择时间和日期,并查看当时的价格。我使用的是这样的查询,以获得“当前”所有产品的价格在任何给定的日期和时间:MySQL查询在给定日期时间之前获取两条最新记录
SELECT A.*
FROM `PriceHistory` A
INNER JOIN (
SELECT `BrandKey`, `LocationKey`, `ProductKey`, max(`EffectiveDateTime`) AS MaxUpdateDate
FROM `PriceHistory`
WHERE `EffectiveDateTime` <= '2010-02-22 12:00:00'
GROUP BY `BrandKey`, `LocationKey`, `ProductKey`
) AS B ON
A.`BrandKey` = B.`BrandKey`
AND A.`LocationKey` = B.`LocationKey`
AND A.`ProductKey` = B.`ProductKey`
AND A.`EffectiveDateTime` = B.MaxUpdateDate
现在我需要能够向用户展示价格多少变化时价格开始生效。所以我需要为选定的时间获取两个最近的价格而不是一个。我很难过。我已经尝试了几件事情,并且我只是收到SQL错误,因为我尝试的连接不合法。任何帮助,将不胜感激。
我可以遍历所有的产品,并得到最近的两个价格,但是这需要大约10秒350级的产品75000个的价格行。我不一定需要在一个查询中使用所有产品,但对每个产品运行查询的速度不够快。
这只会给我两行。我有大约350种产品,所以我正在寻找700行或350行的产品。我编辑了我的问题,使其更清晰一些。 – 2010-02-22 20:43:48