Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL брои последователни дати за текущата поредица

Заявката запазва броя на сериите в променлива и веднага щом има празнина, нулира броя на голям минус. След това връща най-голямата ивица.

В зависимост от това колко гласа може да има даден потребител, може да се наложи да промените -99999 до по-голяма (отрицателна) стойност.

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

Актуализиране

Друг вариант

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

Обърнете внимание, че fiddle ще връща само правилни ивици, ако се стартира на датата на тази публикация :)

Актуализация 2

Заявката по-долу работи с таблици, които позволяват множество гласове на ден от един и същ потребител, като се избира от извлечена таблица, където се премахват дублиращи се дати.

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

Може да искате да замените select * с select streak + 1 в зависимост от това дали искате да включите 1-вия глас в поредицата.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Най-добрият начин да избегнете дублиране на влизане в mysql база данни

  2. Как да ПРИСЪЕДИНЕТЕ таблица с категории за родители в SQL заявка?

  3. Как да намерите определени шестнадесетични стойности и Char() стойности в MySQL SELECT

  4. Как да се уверите, че няма състояние на състезание в базата данни на MySQL, когато увеличавате поле?

  5. Как да получите следващия буквено-цифров идентификатор въз основа на съществуваща стойност от MySQL