我已经搜索了 2 天的答案,但仍然一无所获。请帮帮我。
我有一个包含产品、产品价格和价格登记日期的数据库:
product_id | price | date
-------------------------
1 | 8.95 | 2012-12-01
2 | 3.40 | 2012-12-01
1 | 9.05 | 2012-12-19
3 | 2.34 | 2012-12-24
3 | 2.15 | 2012-12-01
1 | 8.80 | 2012-12-19
1 | 8.99 | 2012-12-02
2 | 3.45 | 2012-12-02
请注意,同一种产品在同一天可能有不同的价格值(第 3 行和第 6 行)。这是因为单一产品有很多供应商。数据库上也有一个供应商列,但我发现它与解决方案无关。如果我错了,您可以将其添加到解决方案中。
基本上我想要的是编写一个返回两组组合数据的查询,如下所示:
- 第一套是根据上个月插入的产品的最低价格制作的。由于今天是 15 日 1 月,查询应读取第 3、4 和 6 行,应用最低价格,并仅返回第 4 和第 6 行,两者都是该产品上个月的最低价格。
- 第二套是最后插入的产品,上个月没有登记价格。即,对于第一组中未显示的产品,查询应搜索最后插入的产品。
我希望这是清楚的。如果不是,请再问我。
这个数据库的查询结果应该是:
product_id | price | date
-------------------------
1 | 8.80 | 2012-12-19 <-Min price for product 1 on last month
3 | 2.34 | 2012-12-24 <-Min price for product 3 on last month
2 | 3.45 | 2012-12-02 <-No reg for product 2 on last month, show last reg.
我已经尝试了所有方法:UNION, (DATE_SUB(CURDATE(), INTERVAL 1 MONTH), MIN(price), MAX(date) etc.等等。没有任何效果。我现在不知道在哪里搜索,请帮助我。
最佳答案
(SELECT product_id, MIN(price), date
FROM products
WHERE date + INTERVAL 1 MONTH > NOW()
GROUP BY product_id)
UNION
(SELECT product_id, price, MAX(date)
FROM products
WHERE product_id NOT IN (SELECT product_id
FROM products
WHERE date + INTERVAL 1 MONTH > NOW()
GROUP BY product_id)
GROUP BY product_id)
这应该可行,但我不确定这是最优化的方法。
关于mysql - 根据时间间隔使用 MAX(price) 或 MAX(date) 对产品进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14339535/