sql >> Database >  >> RDS >> Mysql

Hoe verwijder je alleen continue duplicaten, maar niet alle duplicaten in een selectiequery (MySQL)?

U wilt de vorige waarde krijgen. Als de datums echt geen hiaten of duplicaten hebben, doe dan gewoon:

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;

BEWERKEN:

Als de datums niet aan deze voorwaarden voldoen, kunt u variabelen gebruiken:

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;

Merk op dat MySQL de volgorde van evaluatie van uitdrukkingen in de SELECT . niet garandeert . Variabelen moeten dus niet in de ene uitdrukking worden toegewezen en vervolgens in een andere worden gebruikt -- ze moeten in een enkele uitdrukking worden toegewezen.



  1. Doctrine-query om het totale aantal resultaten in MySQL te vinden met LIMIT

  2. externe mysql-database verbinden met php

  3. Maak een door de gebruiker gedefinieerde functie die werkt met GROUP BY in mysql

  4. Voor veel sites een centrale databaseserver gebruiken:aannemelijk?