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

MySQL menghitung tanggal berturut-turut untuk rentetan saat ini

Kueri menyimpan hitungan beruntun dalam sebuah variabel dan segera setelah ada celah, itu menyetel ulang hitungan ke negatif besar. Kemudian mengembalikan coretan terbesar.

Bergantung pada berapa banyak suara yang dimiliki pengguna, Anda mungkin perlu mengubah -99999 ke nilai yang lebih besar (negatif).

select if(max(maxcount) < 0, 0, max(maxcount)) streak
from (
select 
  if(datediff(@prevDate, datecreated) = 1, @count := @count + 1, @count := -99999) maxcount,
  @prevDate := datecreated
  from votes v cross join 
    (select @prevDate := date(curdate() + INTERVAL 1 day), @count := 0) t1
  where username = 'bob'
  and datecreated <= curdate()
  order by datecreated desc
) t1;

http://sqlfiddle.com/#!2/37129/6

Perbarui

Variasi lain

select * from (
select datecreated, 
  @streak := @streak+1 streak, 
  datediff(curdate(),datecreated) diff
from votes 
cross join (select @streak := -1) t1
where username = 'bob'
and datecreated <= curdate()
order by datecreated desc
) t1 where streak = diff
order by streak desc limit 1

http://sqlfiddle.com/#!2/c6dd5b/20

Catatan, biola hanya akan mengembalikan coretan yang benar jika dijalankan pada tanggal posting ini :)

Perbarui 2

Kueri di bawah ini berfungsi dengan tabel yang memungkinkan beberapa suara per hari oleh pengguna yang sama dengan memilih dari tabel turunan tempat tanggal duplikat dihapus.

select * from (
  select date_created, 
  @streak := @streak+1 streak, 
  datediff(curdate(),date_created) diff
  from (
    select distinct date(date_created) date_created
    from votes where username = 'pinkpopcold'
  ) t1
  cross join (select @streak := -1) t2
  order by date_created desc
  ) 
t1 where streak = diff
order by streak desc limit 1

http://sqlfiddle.com/#!2/5fc6d/7

Anda mungkin ingin mengganti select * dengan select streak + 1 tergantung pada apakah Anda ingin menyertakan suara pertama secara berurutan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kontrol Versi Basis Data untuk MySQL

  2. sql::perilaku SQLString

  3. Backup Database MySQL secara otomatis di server windows

  4. MySQL MONTHNAME() dari angka

  5. Bagaimana cara menghasilkan objek json bersarang menggunakan fungsi json asli mysql?