sql >> Database >  >> RDS >> Mysql

Hoe kan ik een aaneengesloten groep doen in MySQL?

Gebruik:

   SELECT MIN(t.id) 'mi', 
          t.val, 
          COUNT(*)
     FROM (SELECT x.id, 
                 x.val, 
                 CASE 
                   WHEN xt.val IS NULL OR xt.val != x.val THEN 
                     @rownum := @rownum+1 
                   ELSE 
                     @rownum 
                 END AS grp
            FROM TABLE x
            JOIN (SELECT @rownum := 0) r
       LEFT JOIN (SELECT t.id +1 'id',
                         t.val
                    FROM TABLE t) xt ON xt.id = x.id) t
 GROUP BY t.val, t.grp
 ORDER BY mi

De sleutel hier was om een ​​kunstmatige waarde te creëren die groepering mogelijk zou maken.

Eerder het antwoord van Guffa gecorrigeerd:

   SELECT t.id, t.val
     FROM TABLE t
LEFT JOIN TABLE t2 on t2.id + 1 = t.id
    WHERE t2.val IS NULL 
       OR t.val <> t2.val


  1. select * from table vs select colA, colB, etc. from table interessant gedrag in SQL Server 2005

  2. Splits één kolomwaarde in meerdere kolomwaarden

  3. Hoe weet ik de id voordat ik een object opslaat in jpa

  4. Verbindingsproblemen met SQLAlchemy en meerdere processen