Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wyeliminować tylko ciągłe duplikaty, ale nie wszystkie duplikaty w zapytaniu wybierającym (MySQL)?

Chcesz uzyskać poprzednią wartość. Jeśli daty naprawdę nie zawierają luk ani duplikatów, po prostu wykonaj:

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;

EDYCJA:

Jeśli daty nie spełniają tych warunków, możesz użyć zmiennych:

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;

Zauważ, że MySQL nie gwarantuje kolejności oceny wyrażeń w SELECT . Dlatego zmienne nie powinny być przypisywane w jednym wyrażeniu, a następnie używane w innym -- powinny być przypisane w jednym wyrażeniu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Program do tworzenia błędów ze złączem mysql

  2. Parsowanie ciągu do mysql Date

  3. Używanie wyniku SQL w pętli foreach

  4. PolyScale.ai — skalowanie MySQL i PostgreSQL z globalnym buforowaniem

  5. Nie można połączyć się z MySQL za pomocą skryptu PHP podczas korzystania z mysqli lub PDO, ALE mysql działa