我有以下mysql表:
===================================
id | uid | vid | date | num |
===================================
1 | 1 | 1 | 2017-01-01 | |
2 | 1 | 1 | 2017-02-20 | |
3 | 2 | 1 | 2017-02-25 | |
4 | 1 | 2 | 2017-03-05 | |
5 | 1 | 1 | 2017-04-01 | |
===================================
我必须更新num列,如果日期是同一个uid&的最早日期。 vid,那么num列将是1,否则它将是2.因此,在更新数据库/表之后,表将是:
===================================
id | uid | vid | date | num |
===================================
1 | 1 | 1 | 2017-01-01 | 1 |
2 | 1 | 1 | 2017-02-20 | 2 |
3 | 2 | 1 | 2017-02-25 | 1 |
4 | 1 | 2 | 2017-03-05 | 1 |
5 | 1 | 1 | 2017-04-01 | 2 |
===================================
2017-01-01是id#1中最早的日期,id#2& id#5 [uid=1 & vid=1]
,因此id=1
的num为1,而id#2& id#5,num
值为2.
但是,虽然uid=1
适用于ID#4,但vid=2
适用于此情况。因此,num=1
2017-03-05
是最早且唯一一个id = 4 uid&视频组合。以同样的方式,对于id#3,num为1作为uid& vid是不同的。
如何创建单个mysql查询,以便根据uid,vid和amp;来自动更新num
列。日期?
答案 0 :(得分:0)
update your_table t
left join (
select
uid, vid, min(id) as id
from your_table t
join (
select uid, vid, min(date) as date
from your_table
group by uid, vid
) t2 using (uid, vid, date)
group by uid, vid
) t2 on t.uid = t2.uid
and t.vid = t2.vid
and t.id = t2.id
set num = case when t2.id is null then 2 else 1 end;