Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment éliminer uniquement les doublons continus mais pas tous les doublons dans une requête de sélection (MySQL) ?

Vous voulez obtenir la valeur précédente. Si les dates n'ont vraiment pas de lacunes ou de doublons, faites simplement :

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;

MODIFIER :

Si les dates ne remplissent pas ces conditions, vous pouvez utiliser des variables :

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;

Notez que MySQL ne garantit pas l'ordre d'évaluation des expressions dans le SELECT . Ainsi, les variables ne doivent pas être affectées dans une expression puis utilisées dans une autre -- elles doivent être affectées dans une seule expression.