Обновить столбец SQL на основе фильтра другого столбца? - PullRequest
0 голосов
/ 11 октября 2018

Я застрял в запросе SQL.Я хочу обновить столбец STATUS с помощью SQL-запроса.Точное требование: у меня есть таблица SQL следующим образом.

_____________________________________________
start_date          end_date        status
---------------------------------------------
2014/01/03      |   2018/01/03  |   FAILED
2016/12/15      |   2017/01/03  |   SUCCESS
2014/01/03      |   2010/01/13  |   FAILED
2017/10/23      |   2017/01/03  |   FAILED
2014/01/03      |   2011/01/03  |   FAILED
2017/11/13      |   2017/01/03  |   SUCCESS
---------------------------------------------

В приведенной выше таблице у меня есть start_date, end_date и status.Теперь я хочу обновить статус с «FAILED» до «SUSPEND», где end_date является самой старой среди всех дат, а start_date такая же, но end_date другая.(Здесь будет обновлена ​​только одна строка, как показано в таблице ниже)

Я пытаюсь создать запрос, но не могу получить требуемый результат.после применения правильного запроса таблица должна выглядеть следующим образом.


start_date          end_date        status
---------------------------------------------
2014/01/03      |   2018/01/03  |   FAILED
2016/12/15      |   2017/01/03  |   SUCCESS
2014/01/03      |   2010/01/13  |   SUSPEND
2017/10/23      |   2017/01/03  |   FAILED
2014/01/03      |   2011/01/03  |   FAILED
2017/11/13      |   2017/01/03  |   SUCCESS
---------------------------------------------

Может кто-нибудь, пожалуйста, помогите мне в этом.Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 11 октября 2018
  • В производной таблице получите минимальное значение end_date для группы start_date.
  • Присоединитесь к своей главной таблице на основе start_date и min_end_date.
  • Обновите status соответственно.

Попробуйте следующее в MySQL ( DB Fiddle ):

UPDATE your_table AS t1
JOIN (SELECT start_date, 
             MIN(end_date) AS min_end_date 
      FROM your_table 
      GROUP BY start_date) AS t2 ON t2.start_date = t1.start_date AND 
                                    t2.min_end_date = t1.end_date 
SET t1.status = 'SUSPEND' 
WHERE t1.status = 'FAILED'
0 голосов
/ 11 октября 2018

Что бы ни говорила Мадхур, это правильно, кроме функциональной ошибки.Так как вы просили самое старое. Мы должны запросить, используя MIN вместо MAX, как показано ниже

UPDATE your_table AS t1
JOIN (SELECT start_date, 
             MIN(end_date) AS max_end_date 
     FROM your_table 
     GROUP BY start_date) AS t2 ON t2.start_date = t1.start_date AND 
                                    t2.max_end_date = t1.end_date  
SET t1.status = 'SUSPEND' 
WHERE t1.status = 'FAILED'
0 голосов
/ 11 октября 2018

Вы можете использовать обновление, используя предложение where.Я не понял, что вы имеете в виду, и start_date одно и то же, но end_date отличается, поэтому я не использовал его.

UPDATE table1
SET status='SUSPEND'
WHERE status='FAILED' and end_date<start_date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...