sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo eliminar solo los duplicados continuos pero no todos los duplicados en una consulta de selección (MySQL)?

Desea obtener el valor anterior. Si las fechas realmente no tienen lagunas ni duplicados, solo haz lo siguiente:

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:

Si las fechas no cumplen estas condiciones, puede usar variables:

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;

Tenga en cuenta que MySQL no garantiza el orden de evaluación de las expresiones en el SELECT . Por lo tanto, las variables no deben asignarse en una expresión y luego usarse en otra; deben asignarse en una sola expresión.