sql >> Databasteknik >  >> RDS >> Mysql

MySQL räknar på varandra följande datum för nuvarande streak

Frågan behåller streak count i en variabel och så snart det finns ett gap återställs räkningen till ett stort negativt. Det ger sedan den största streaken.

Beroende på hur många röster en användare kan ha kan du behöva ändra -99999 till ett större (negativt) värde.

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

Uppdatera

En annan variant

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

Notera, fiol kommer bara att returnera korrekta streck om den körs vid datumet för detta inlägg :)

Uppdatering 2

Frågan nedan fungerar med tabeller som tillåter flera röster per dag av samma användare genom att välja från en härledd tabell där dubbletter av datum tas bort.

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

Du kanske vill ersätta select * med select streak + 1 beroende på om du vill ha med 1:a rösten i raden.



  1. Hur tar man bort ett antal poster samtidigt på MySQL?

  2. Hämtar länkad lista i MySQL-databas

  3. Hur man gör flera frågor till SQL

  4. Länka till eller importera data från Salesforce