Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да премахнете само непрекъснати дубликати, но не всички дубликати в заявка за избор (MySQL)?

Искате да получите предишната стойност. Ако датите наистина нямат пропуски или дубликати, просто направете:

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;

РЕДАКТИРАНЕ:

Ако датите не отговарят на тези условия, тогава можете да използвате променливи:

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;

Имайте предвид, че MySQL не гарантира реда на оценка на изразите в SELECT . Така че променливите не трябва да се присвояват в един израз и след това да се използват в друг – те трябва да се присвояват в един израз.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Предупреждение:mysql_real_escape_string():Достъпът е отказан за потребител 'root'@'localhost' (използвайки парола:НЕ) .../public_html/checklogin.php

  2. Пребройте стойностите, които съществуват преди и след определен период от време

  3. PHP, MySQL:Получаване на имейл, автоматично търсене в DB и изпращане на имейл въз основа на резултатите

  4. Индекс на множество колони с Ruby on Rails

  5. Заключване на ниво ред в Mysql