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

ध्यान दें, इस पोस्ट की तारीख पर चलने पर ही फिडल सही स्ट्रीक्स लौटाएगा :)

अपडेट 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्ट्रिंग में बड़े अक्षरों की गणना करें

  2. जावा और MySQL का उपयोग करके टेबल दिखाएं?

  3. प्रति श्रेणी वस्तुओं की गणना कैसे करें?

  4. तर्कों की एक गतिशील संख्या के साथ एक MySQL संग्रहीत फ़ंक्शन बनाएं

  5. MySQL ट्रिगर किसी अन्य तालिका में सम्मिलित करें