日期之间的条件选择

时间:2015-05-18 11:01:45

标签: mysql sql date datetime between

我有一张桌子,想找到价格的最小值和最大值。 我希望从"来自"之间的当前日期获得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`;

3 个答案:

答案 0 :(得分:7)

如果我理解正确,您需要最小值和最大值:

  

25 20,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”声明可以在这里使用:

http://sqlfiddle.com/#!9/4653c/4

答案 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?无论如何,请告诉我,我会通过相应的查询来改进我的答案。