Oracle
 sql >> Base de données >  >> RDS >> Oracle

Incrémenter le numéro de ligne sur le groupe avec des groupes répétés

Vous pouvez utiliser la différence des numéros de lignes pour définir les groupes :

select Shade, count(*) as amount
from (select t.*,
             row_number() over (order by level) as seqnum,
             row_number() over (partition by shade order by level) as seqnum_s
      from t
     ) t
group by Shade, (seqnum - seqnum_s);

Il est un peu difficile d'expliquer pourquoi cela fonctionne. Si vous regardez les résultats de la sous-requête, il devient évident pourquoi la différence entre les deux row_number() les valeurs identifient des groupes séquentiels.