Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL obtém classificação de valores duplicados com base em suas datas de criação

select
t.*,
@rank := if(@prevDate = create_date, @rank, @rank + 1) as rank,
@prevDate := create_date
from
your_table t 
, (select @rank := 0, @prevDate := null) var_init
order by create_date, id

Explicação:

Aqui
, (select @rank := 0, @prevDate := null) var_init

as variáveis ​​são inicializadas. É o mesmo que escrever
set @rank = 0;
set @prevDate = null;
select ... /*without the crossjoin*/;

Então a ordem das colunas na cláusula select é importante. Primeiro verificamos com esta linha
@rank := if(@prevDate = create_date, @rank, @rank + 1) as rank,

se a linha atual tiver a mesma data da linha anterior. O @prevDate contém o valor da linha anterior. Se sim, o @rank variável permanece a mesma, se não for incrementada.

Na próxima linha
@prevDate := create_date

definimos o @prevDate variável para o valor da linha atual. É por isso que a ordem das colunas no select cláusula é importante.

Por fim, como estamos verificando com a linha anterior, se as datas forem diferentes, o order by cláusula é importante.