Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Comparar a linha atual com a linha anterior no SQL Server


Você pode usar a seguinte consulta:
SELECT RaidNo, OutComeID, RN,
       CASE 
          WHEN OutComeID <> 16 THEN 0
          ELSE ROW_NUMBER() OVER (PARTITION BY OutComeID, grp ORDER BY RN) 
       END AS Result
FROM (
   SELECT RaidNo, OutComeID, RN,
          RN - ROW_NUMBER() OVER (PARTITION BY OutComeID ORDER BY RN) AS grp
   FROM mytable) AS t
ORDER BY RN

Campo grp identifica fatias (também chamadas de ilhas) de registros consecutivos com o mesmo OutComeID valor. A consulta externa usa grp para enumerar cada registro que pertence a um '16' fatiar. Os registros que pertencem às outras fatias recebem o valor 0 .

Demonstração aqui