Условный выбор между датами
У меня есть таблица и хотелось бы найти минимальные и максимальные значения цены.
Я хотел бы получить минимальную цену с 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 |
+------+------+
Ответ 2
Я думаю, что инструкция "HAVING" будет работать здесь:
http://sqlfiddle.com/#!9/4653c/4
Ответ 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? В любом случае, дайте мне знать, и я улучшу свой ответ с соответствующим запросом.