如何通过单个mysql查询基于特定日期更新所有行

时间:2017-04-26 04:33:50

标签: mysql

我有以下mysql表:

=============================
id | vid |    date    | num |
=============================
 1 |  1  | 2017-01-01 |     |
 2 |  1  | 2017-02-20 |     |
 3 |  2  | 2017-02-25 |     |
 4 |  1  | 2017-03-05 |     |
=============================

我必须以这样的方式更新num列,如果日期最早为同一vid,那么num列将为1,否则它将为2.因此,在更新之后数据库/表将是:

=============================
id | vid |    date    | num |
=============================
 1 |  1  | 2017-01-01 |  1  |
 2 |  1  | 2017-02-20 |  2  |
 3 |  2  | 2017-02-25 |  1  |
 4 |  1  | 2017-03-05 |  2  |
=============================

由于2017-01-01vid=1的最早日期,因此num1。因此vid=1的所有其他行都是2。另一方面,对于vid=2,num列将为1,因为它是唯一一行vid=2

如何创建单个mysql查询,以便它会自动根据上述逻辑自动更新整个表?

2 个答案:

答案 0 :(得分:1)

假设你的桌子是“你的桌子”:

UPDATE 
    yourTable inner join (select *,IF(date=(select min(date) 
                    from yourTable 
                    where vid=a.vid  
                    group by vid), 1, 2) as actualNum
                 from yourTable a) abc 
    ON yourTable.id = abc.id 
SET yourTable.num = abc.actualNum;

答案 1 :(得分:-1)

update mytable as m 
set num = case when date = 
(select min(date) from mytable m2 where m2.id = m.id) 
then 1 else 2 end

......我想

或者

UPDATE m
set num = case when date = 
    (select min(date) from mytable m2 where m2.id = m.id) 
    then 1 else 2 end
FROM mytable m