2017-02-08 6 views
0

У меня есть запрос MySql, который выглядит следующим образом:Добавить значения, если условие истинно столбец

SELECT o.id, 
     o.priorytet_1 + 
     o.priorytet_2 + 
     o.priorytet_3 AS bonus 
FROM obiekty o 
WHERE o.ac=1 
GROUP BY o.id 
ORDER BY `o`.`id` ASC 

рядом с priorytet_1, priorytet_2 and priorytet_3 столбцов У меня есть priorytet_1_valid, priorytet_2_valid, priorytet_3_valid где хранить даты, к которым, например priorytet_1 является действительным.

И я хочу добавить только те столбцы, дата которых < now().

Что-то вроде:

SELECT o.id, 
     if (o.priorytet_1_valid < now()) o.priorytet_1 + 
     if (o.priorytet_2_valid < now()) o.priorytet_2 + 
     if (o.priorytet_3_valid < now()) o.priorytet_3 AS bonus 
FROM obiekty o 
WHERE o.ac=1 
GROUP BY o.id 
ORDER BY `o`.`id` ASC 

Спасибо за помощь!

ответ

0

Try:

SELECT o.id, 
     SUM(IF (o.priorytet_1_valid < NOW(), o.priorytet_1, 0) + 
      IF (o.priorytet_2_valid < NOW(), o.priorytet_2, 0) + 
      IF (o.priorytet_3_valid < NOW(), o.priorytet_3, 0)) AS bonus 
FROM obiekty o 
WHERE o.ac=1 
GROUP BY o.id 
ORDER BY `o`.`id` ASC 

Вы, вероятно, хотите использовать SUM, так как у вас есть пункт GROUP BY. Функция SUM, используемая в запросе выше условно добавляет поля o.priorytet_1, o.priorytet_2, o.priorytet_3 в случае, если соответствующее поле «valid» старше текущей даты/времени.

Смежные вопросы