条件 select 日期之间

Conditional select between dates

我有一个 table 并且想找到价格的最小值和最大值。 当当前日期在 "from" 和 "to" 之间时,我想从 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

所以从上面的table我需要:min->20(因为当前日期在"from"/"to"之间)和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`;

我认为 "HAVING" 声明在这里可以工作:

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

这应该适用于获得 action_price 中的最小值。

SELECT MIN(action_price) 
FROM yourdb 
WHERE DATE_FORMAT(CURDATE(), '%Y-%m-%d') > from 
  AND DATE_FORMAT(CURDATE(), '%Y-%m-%d') < to;

我在 fiddle 上试过这个并且成功了,我只是重命名了 'from' 和 'to' 列,因为它们是 MySQL.

上的保留字

至于MAX这个值,我不知道你到底想要什么,得到那个MAX值的条件是什么?MIN? 相同 无论如何,让我知道,我会通过相应的查询改进我的答案。

如果我没理解错的话,你需要这些值的最小值和最大值:

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 |
+------+------+