Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
每个用户名第一次出现时的Mysql更新列_Mysql - Fatal编程技术网

每个用户名第一次出现时的Mysql更新列

每个用户名第一次出现时的Mysql更新列,mysql,Mysql,我试图标记每个用户名每天出现的第一次。 我已经将所有相关人员标记为dupe=1。当天的第一个应设置为dupe=2 和外行的说法一样,如果当天第一次输入这个用户名,则标记column=2。每天都要做 基于这个问题,我可以这样做 Select * from ( select * from table WHERE dupe=1 order by date desc ) x group by date 它返回我要查找的每个副本的一个成员,但我想将其设置为=2。我很难将此作为更新语句

我试图标记每个用户名每天出现的第一次。 我已经将所有相关人员标记为dupe=1。当天的第一个应设置为dupe=2

和外行的说法一样,如果当天第一次输入这个用户名,则标记column=2。每天都要做

基于这个问题,我可以这样做

Select *
from (
     select * from table WHERE dupe=1 order by date desc
     ) x
group by date
它返回我要查找的每个副本的一个成员,但我想将其设置为=2。我很难将此作为更新语句。或者这甚至可以作为更新语句使用?我只想设置第一个成员

我想要的结果是-

Select username, dupe where dupe!= 0;

Day 1
Bob   - 2
Kathy - 2
Bob   - 1
Kathy - 1
Kathy - 1

Day 2
Kathy - 2
Kathy - 1
Bob - 2
Kathy - 1
我试过的是

UPDATE table set dupeflag=2 from (
select * from
from (
    select * from table WHERE dupeflag=1 order by date desc
    ) x
group by date
)

但是没有运气。可能是大错特错了

我为此选择了一个新的旗帜专栏,另外还有一个好处,那就是帮助你回答其他问题

演示模式设置

create table table1
(
    id int auto_increment primary key,
    username varchar(30) not null,
    `date` date not null,
    dupeFlag int null, --  <---- New flag column, nullable, ignored on inserts below
    firstFlag int null --  <-- was first dupe for day? 2=yes, ignored on inserts below
);

insert table1 (username,`date`) values ('john','2015-01-01');
insert table1 (username,`date`) values ('kim','2015-01-01');
insert table1 (username,`date`) values ('john','2015-01-01');
insert table1 (username,`date`) values ('john','2015-02-01');
insert table1 (username,`date`) values ('john','2015-03-01');
insert table1 (username,`date`) values ('john','2015-03-01');
insert table1 (username,`date`) values ('kim','2015-01-01');
insert table1 (username,`date`) values ('kim','2015-02-01');
update table1 t1
join 
(   select username,`date`,count(*) as theCount,min(id) as minForGroup
    from table1
    group by username,`date`
    having theCount>1
) inr
on inr.username=t1.username and inr.`date`=t1.`date`
set dupeFlag=1,
firstFlag=if(id=inr.minForGroup,2,666);


select * from table1;
+----+----------+------------+----------+-----------+
| id | username | date       | dupeFlag | firstFlag |
+----+----------+------------+----------+-----------+
|  1 | john     | 2015-01-01 |        1 |         2 |
|  2 | kim      | 2015-01-01 |        1 |         2 |
|  3 | john     | 2015-01-01 |        1 |       666 |
|  4 | john     | 2015-02-01 |     NULL |      NULL |
|  5 | john     | 2015-03-01 |        1 |         2 |
|  6 | john     | 2015-03-01 |        1 |       666 |
|  7 | kim      | 2015-01-01 |        1 |       666 |
|  8 | kim      | 2015-02-01 |     NULL |      NULL |
+----+----------+------------+----------+-----------+
8 rows in set (0.00 sec)