Mysql
 sql >> Database >  >> RDS >> Mysql

Come eliminare solo i duplicati continui ma non tutti i duplicati in una query selezionata (MySQL)?

Vuoi ottenere il valore precedente. Se le date non hanno davvero lacune o duplicati, fallo e basta:

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;

MODIFICA:

Se le date non soddisfano queste condizioni, puoi utilizzare le variabili:

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;

Nota che MySQL non garantisce l'ordine di valutazione delle espressioni in SELECT . Quindi le variabili non dovrebbero essere assegnate in un'espressione e poi usate in un'altra -- dovrebbero essere assegnate in una singola espressione.