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

Como eliminar apenas duplicatas contínuas, mas não todas as duplicatas em uma consulta selecionada (MySQL)?


Você deseja obter o valor anterior. Se as datas realmente não tiverem lacunas ou duplicatas, apenas faça:
select t.*
from t left join
     t tprev
     on t.col1 = date_add(tprev.col1, interval 1 day)
where tprev.col2 is null or tprev.col2 <> t.col2;

EDITAR:

Se as datas não atenderem a essas condições, você poderá usar variáveis:
select t.*
from (select t.*,
             (@rn := if(@v = col2, @rn + 1,
                        if(@v := col2, 1, 1)
                       )
             ) as rn
      from t cross join
           (select @v := 0, @rn := 0) params
      order by t.col1
     ) t
where rn = 1;

Observe que o MySQL não garante a ordem de avaliação das expressões no SELECT . Portanto, as variáveis ​​não devem ser atribuídas em uma expressão e depois usadas em outra -- elas devem ser atribuídas em uma única expressão.