Условный выбор между датами

У меня есть таблица и хотелось бы найти минимальные и максимальные значения цены. Я хотел бы получить минимальную цену с 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`;

Ответ 1

Если я правильно понимаю, вы хотите иметь минимальное и максимальное значения:

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

Ответ 3

Это должно работать для получения минимального значения в action_price.

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

Я попробовал это на скрипке и работал, я просто переименовал столбцы "from" и "to", поскольку они зарезервированы для MySQL.

Что касается значения MAX, я не знаю, чего именно вы хотите, каково было бы условие получения значения MAX? То же, что и для MIN? В любом случае, дайте мне знать, и я улучшу свой ответ с соответствующим запросом.