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

MySQL mendapatkan peringkat nilai duplikat berdasarkan tanggal pembuatannya

select
t.*,
@rank := if(@prevDate = create_date, @rank, @rank + 1) as rank,
@prevDate := create_date
from
your_table t 
, (select @rank := 0, @prevDate := null) var_init
order by create_date, id

Penjelasan:

Disini

, (select @rank := 0, @prevDate := null) var_init

variabel diinisialisasi. Sama halnya dengan menulis

set @rank = 0;
set @prevDate = null;
select ... /*without the crossjoin*/;

Maka urutan kolom dalam klausa pilih adalah penting. Pertama kita periksa dengan baris ini

@rank := if(@prevDate = create_date, @rank, @rank + 1) as rank,

jika baris saat ini memiliki tanggal yang sama dengan baris sebelumnya. @prevDate menyimpan nilai dari baris sebelumnya. Jika ya, @rank variabel tetap sama, jika tidak maka akan bertambah.

Di baris berikutnya

@prevDate := create_date

kami mengatur @prevDate variabel ke nilai baris saat ini. Itu sebabnya urutan kolom di select klausa itu penting.

Terakhir, karena kami memeriksa dengan baris sebelumnya, jika tanggalnya berbeda, order by klausa itu penting.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memasukkan entri ke kolom JSON di postgres

  2. Bedakan antara UPDATE yang gagal karena kondisi yang salah dan UPDATE yang gagal karena nilai yang tidak berubah

  3. Sertakan Config dan Database dari file lain

  4. File kunci salah untuk tabel MYSQL

  5. Bantuan Algoritma Kueri PHP MYSQL