Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara menghilangkan hanya duplikat terus menerus tetapi tidak semua duplikat dalam kueri pemilihan (MySQL)?

Anda ingin mendapatkan nilai sebelumnya. Jika tanggal benar-benar tidak memiliki celah atau duplikat, lakukan saja:

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:

Jika tanggal tidak memenuhi ketentuan ini, Anda dapat menggunakan variabel:

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;

Perhatikan bahwa MySQL tidak menjamin urutan evaluasi ekspresi dalam SELECT . Jadi variabel tidak boleh ditetapkan dalam satu ekspresi dan kemudian digunakan di ekspresi lain -- variabel harus ditetapkan dalam satu ekspresi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. VS 2019 dan nama database duplikat MySQL Entity Framework

  2. Gunakan MySQL untuk menentukan apakah hari ini adalah hari ulang tahun pengguna

  3. lower_case_table_names=1 di Ubuntu 18.04 tidak membiarkan mysql memulai

  4. UNION setelah ORDER BY dan LIMIT

  5. Menggunakan ORDER BY dan GROUP BY bersama-sama