sql >> Databasteknik >  >> RDS >> Mysql

Hur eliminerar man bara kontinuerliga dubbletter men inte alla dubbletter i en urvalsfråga (MySQL)?

Du vill få det tidigare värdet. Om datumen verkligen inte har några luckor eller dubbletter gör du bara:

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:

Om datumen inte uppfyller dessa villkor kan du använda 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;

Observera att MySQL inte garanterar ordningen för utvärdering av uttryck i SELECT . Så variabler bör inte tilldelas i ett uttryck och sedan användas i ett annat -- de bör tilldelas i ett enda uttryck.



  1. Pivotera på flera kolumner med Tablefunc

  2. phpMyBackupPro – Ett webbaserat MySQL-säkerhetskopieringsverktyg för Linux

  3. Exportera SQLite-frågeresultat till en CSV-fil

  4. Utdata mellan två datum mysql