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

SQL Server :grouper par consécutif

Dans SQL Server, vous pouvez le faire avec l'agrégation et la différence des numéros de lignes :

select HevEvenementID, HteTypeEvenID,
       max(HjvNumeSequJour)
from (select t.*,
             row_number() over (partition by HevEvenementID order by HjvNumeSequJour) as seqnum_1,
             row_number() over (partition by HevEvenementID, HteTypeEvenID order by HjvNumeSequJour) as seqnum_2
      from yourtable t
     ) t
group by HevEvenementID, HteTypeEvenID, (seqnum_1 - seqnum_2)
order by max(HjvNumeSequJour);

Je pense que la meilleure façon de comprendre comment cela fonctionne est de regarder les résultats de la sous-requête. Vous verrez comment la différence entre les deux valeurs définit les groupes de valeurs adjacentes.