我有一张桌子,想找到价格的最小值和最大值。 我希望从"来自"之间的当前日期获得action_table的最低价格。和"到"。
from to action_price price
2015-04-02 2015-08-02 20 25
2015-04-02 2015-04-20 0 30
2015-04-03 2015-04-21 0 40
因此,从上表我需要: min-> 20 (因为当前日期介于"来自" /"到")和 MAX-→40
我尝试了类似的东西,但没有按预期工作:
SELECT
CASE WHEN curdate() BETWEEN from AND to THEN MAX(action_price) ELSE MAX(price) END AS max,
CASE WHEN curdate() BETWEEN from AND to THEN MIN(action_price) ELSE MIN(price) END AS min
FROM `table`;
答案 0 :(得分:7)
如果我理解正确,您需要最小值和最大值:
2520,30,40
你只需要将case语句包装在聚合函数中而不是其他方式:
SELECT
MIN(CASE WHEN CURDATE() BETWEEN `from` AND `to` THEN action_price ELSE price END) AS `min`,
MAX(CASE WHEN CURDATE() BETWEEN `from` AND `to` THEN action_price ELSE price END) AS `max`
FROM action_table;
+------+------+
| min | max |
+------+------+
| 20 | 40 |
+------+------+
答案 1 :(得分:2)
我认为“HAVING”声明可以在这里使用:
答案 2 :(得分:1)
这应该可以在action_price
中获得最小值。
SELECT MIN(action_price)
FROM yourdb
WHERE DATE_FORMAT(CURDATE(), '%Y-%m-%d') > from
AND DATE_FORMAT(CURDATE(), '%Y-%m-%d') < to;
我尝试了这个小提琴,并且工作,我刚刚重命名为&#39;来自&#39;和&#39;到&#39;因为它们是MySQL上的保留字。
至于 MAX 值,我不知道你到底想要什么,获得 MAX值的条件是什么?与< strong> MIN?无论如何,请告诉我,我会通过相应的查询来改进我的答案。