У меня есть такая таблица с датами в формате ГГГГ-ММ-ДД
id | state_id | created_on | closed_on |
1 | 1 | 2020-02-19 | NULL |
2 | 2 | 2020-01-02 | 2020-01-03 |
3 | 1 | 2020-01-05 | NULL |
4 | 4 | 2020-02-07 | 2020-02-08 |
4 | 3 | 2020-02-20 | NULL |
Мне нужно обновить СОСТОЯНИЕ со случайным состоянием от 2 до 6 ГДЕ
- state_id равно 1 ИЛИ state_id равно 3
- create_on в прошлом
Я могу сделать это с этим ( ЭТО РАБОТАЕТ ОТЛИЧНО * ):
UPDATE table SET state_id = FLOOR(2 + rand() * 6)
WHERE created_on < CURRENT_DATE()
AND (state_id=1 OR state_id=3)
Что мне нужно сделать дополнительно в том же обновлении, это установить closed_on :
- NULL, если новое случайное состояние равно 3
CURRENT_DATE()
, если новое случайное состояние ЕСТЬ что угодно, кроме 3
Я думал об использовании SET @newState = FLOOR(2 + rand() * 6)
, но таким образом все записи будут иметь одинаковый state_id
Возможно ли обновить с другими значениями?
как то так
UPDATE table SET state_id = FLOOR(2 + rand() * 6), closed_on = IF(new_state_id = 3, NULL, CURRENT_DATE())
WHERE created_on < CURRENT_DATE()
AND (state_id=1 OR state_id=3)