Mysql:根据日期选择产品的新价格

时间:2014-03-11 20:16:09

标签: mysql

我们有一个每天运行一次的脚本,通过按日期查找新产品价格来更新相关系统的价格。例如:

ID | product_id | date       | price
------------------------------------
1  | 1          | 2014-03-01 | 199

2  | 1          | 2014-04-01 | 299

3  | 2          | 2014-03-11 | 150

4  | 2          | 2014-04-17 | 172

因此,我们的脚本将在4月1日运行,并执行SELECT * FROM table WHERE date='2014-04-01';,然后使用该product_id列以新价格更新其他系统。一切都很好。我们现在遇到了一个问题,但如果系统没有运行一天,或者用户过去的日期,系统将永远不会使用新的定价进行更新。

所以问题是:在日期< =今天,每个不同的product_id选择max(date)的查询是什么样的?

我尝试了各种不同的方法()和分组,但无法获得我正在寻找的结果。结果是当脚本在4月2日运行时,它会看到最大日期<今天是4月1日,所以抓住这些价格。

2 个答案:

答案 0 :(得分:2)

你可能正在寻找这个:

SELECT *
FROM table
WHERE date=(SELECT MAX(date) FROM table WHERE date<='2014-04-01')

或者产品可以有不同的日期:

SELECT t1.*
FROM table t1 INNER JOIN (SELECT product_id, MAX(date) max_date
                          FROM table
                          WHERE date<='2014-04-01'
                          GROUP BY product_id) t2
     ON t1.product_id=t2.product_id AND t1.date=t2.max_date

答案 1 :(得分:1)

(也许SELECT * FROM table WHERE date<'2014-04-01' ORDER by date DESC LIMIT 1必须更换当然的日期,但这会选择此日期之前的最后一个条目。)

编辑:也许这可以提供帮助:Oracle equivalent of Postgres' DISTINCT ON?