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

Hvordan fjerner man kun kontinuerlige dubletter, men ikke alle dubletter i en udvalgt forespørgsel (MySQL)?

Du vil have den tidligere værdi. Hvis datoerne virkelig ikke har nogen huller eller dubletter, skal du bare gøre:

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;

EDIT:

Hvis datoerne ikke opfylder disse betingelser, kan du bruge variabler:

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;

Bemærk, at MySQL ikke garanterer rækkefølgen af ​​evaluering af udtryk i SELECT . Så variabler bør ikke tildeles i ét udtryk og derefter bruges i et andet -- de bør tildeles i et enkelt udtryk.



  1. Tablespace SYSMGMTDATA er FULD i Grid Infrastructure Management Repository (MGMTDB)

  2. Hvordan ændrer man understrenge?

  3. Beregn antallet af poster for hver dato mellem 2 datoer

  4. ORA-04021:timeout opstod, mens man ventede på at låse objektet