Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie eliminiere ich nur fortlaufende Duplikate, aber nicht alle Duplikate in einer ausgewählten Abfrage (MySQL)?

Sie möchten den vorherigen Wert erhalten. Wenn die Daten wirklich keine Lücken oder Duplikate aufweisen, tun Sie einfach:

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;

BEARBEITEN:

Wenn die Daten diese Bedingungen nicht erfüllen, können Sie Variablen verwenden:

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;

Beachten Sie, dass MySQL die Reihenfolge der Auswertung von Ausdrücken in SELECT nicht garantiert . Daher sollten Variablen nicht in einem Ausdruck zugewiesen und dann in einem anderen verwendet werden – sie sollten in einem einzigen Ausdruck zugewiesen werden.