sql >> データベース >  >> RDS >> Mysql

各ユーザー名が最初に出現したときのMysql更新列

    私はこのための新しいフラグ列を使用しました。さらに、他の質問ここ を支援するという利点がありました。 。

    デモスキーマの設定

    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');
    

    更新ステートメント重複を設定します および最初 PKIDに基づく日の

    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)
    



    1. SelectクエリのOFFSET-FETCHオプションによるフィルタリング-SQLServer/TSQLチュートリアルパート118

    2. 同じプロジェクト内のGoogleComputeEngineインスタンスのプールからCloudSQLDBに接続するにはどうすればよいですか?

    3. mySQLでカスタムORDERBYオーダーを定義する方法

    4. ワードラップは数字もラップさせません