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

いくつかの列によるrow_number

    残念ながら、MySQLが、使用しようとしている分析関数、つまりROWNUMBER() OVER PARTITIONを提供しているとは思いません。;

    ただし、それは他の手段を使用して導出できないという意味ではありません。これを試してみてください:

    create table myTable (type varchar(50) not null,id int(10) unsigned not null,
    date1 varchar(10) default null,date2 varchar(10) default null,diff int unsigned default null
    );
    
    insert into myTable (type,id,date1,date2,diff) values ('blue',1,'x1','xxx',18);
    insert into myTable (type,id,date1,date2,diff) values ('blue',1,'x2',null,null);
    insert into myTable (type,id,date1,date2,diff) values ('red',1,'x1',null,null);
    insert into myTable (type,id,date1,date2,diff) values ('blue',2,'x1','xx',15);
    insert into myTable (type,id,date1,date2,diff) values ('blue',2,'x2','xx',18);
    insert into myTable (type,id,date1,date2,diff) values ('blue',2,'x3',null,null);
    
    select t.type,t.id,t.date1,t.date2,t.rownum
    from
    (
    select mt.type,mt.id,mt.date1,mt.date2,mt.diff,
    case 
    when mt.id = @curId and mt.type = @curType then @curRow := @curRow + 1 
         else @curRow := 1
    END as rownum,
    @curId := mt.id,
    @curType := mt.type
    from myTable mt
    join (select @curRow := 0, @curId := -1,@curType="") r
    order by mt.id,mt.type
    ) t;
    



    1. Postgresql Windows、デフォルトのパスワードはありますか?

    2. @curRankからランク位置を取得する方法

    3. グループ化前のMySQLの注文

    4. 他のフィールドの値としてのMySQLのデフォルト値