sql >> Databasteknik >  >> RDS >> Mysql

radnummer med flera kolumner

Tyvärr tror jag inte att MySQL tillhandahåller de analytiska funktioner som du försöker använda, dvs ROWNUMBER() OVER PARTITION;

Det betyder dock inte att det inte kan härledas med andra medel. Prova detta:

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. Vad betyder det med att välja 1 från tabellen?

  2. CURRENT_TIMESTAMP i millisekunder i h2

  3. Hur kan man jämföra mellan tider i while loop i lagrad procedur?

  4. Kan du använda en MySQL-fråga för att helt skapa en kopia av databasen