条件 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" 声明在这里可以工作:
这应该适用于获得 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 |
+------+------+
我有一个 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" 声明在这里可以工作:
这应该适用于获得 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? 相同 无论如何,让我知道,我会通过相应的查询改进我的答案。
如果我没理解错的话,你需要这些值的最小值和最大值:
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 |
+------+------+