Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

लगातार दिखावे से MySQL समूह

बशर्ते कि आपकी टेबल इस तरह दिखे:

"id";"year";"team"
"1";"2000";"AAA"
"2";"2001";"CCC"
"3";"2002";"CCC"
"4";"2003";"BBB"
"5";"2004";"AAA"
"6";"2005";"AAA"
"7";"2006";"AAA"

इस क्वेरी को चाल चलनी चाहिए:

SELECT a.year AS start
     , MIN(c.year) AS end
     , MIN(c.year)-a.year+1 AS total
     , CONCAT_WS('-', a.year, IF(a.year = min(c.year), NULL, min(c.year))) as start_end
     , a.team
  FROM 
     ( SELECT x.year, x.team, COUNT(*) id
         FROM results x
         JOIN results y
           ON y.year <= x.year
        GROUP BY x.id
     ) AS a
  LEFT JOIN 
     ( SELECT x.year, x.team, COUNT(*) id 
         FROM results x
         JOIN results y
           ON y.year <= x.year
        GROUP BY x.id
     ) AS b ON a.id = b.id + 1 AND b.team = a.team
  LEFT JOIN  
     ( SELECT x.year, x.team, COUNT(*) id 
         FROM results x
         JOIN results y
           ON y.year <= x.year
        GROUP BY x.id
     ) AS c ON a.id <= c.id AND c.team = a.team
  LEFT JOIN 
     ( SELECT x.year, x.team, COUNT(*) id 
         FROM results x
         JOIN results y
           ON y.year <= x.year
        GROUP BY x.id
     ) AS d ON c.id = d.id - 1 AND d.team = c.team
WHERE b.id IS NULL AND c.id IS NOT NULL AND d.id IS NULL
GROUP BY start;

BTW आपको कॉमन क्वेरी ट्री मिल सकता है। इन समस्याओं को हल करने के लिए आसान ("एक क्रम में पिछले और अगले मान खोजें" के लिए उत्तर देखें) :p.




  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 - प्रत्येक GROUP BY का X नंबर लौटाना

  2. त्रुटि प्राप्त करना ऑपरेशन '=' के लिए कॉलेशन (utf8mb4_unicode_ci,IMPLICIT) और (utf8mb4_general_ci,IMPLICIT) का अवैध मिश्रण

  3. क्या आप पीडीओ का उपयोग करके प्लेसहोल्डर को क्वेरी के चुनिंदा हिस्से में रख सकते हैं?

  4. PHP का उपयोग कर MYSQL डेटा के साथ बूटस्ट्रैप प्रगति पट्टी?

  5. MySQL FULLTEXT काम नहीं कर रहा है