sql >> Base de Datos >  >> RDS >> Sqlserver

Compare la fila actual con la fila anterior en SQL Server

Puede utilizar la siguiente 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 segmentos (también llamados islas) de registros consecutivos que tienen el mismo OutComeID valor. La consulta externa usa grp para enumerar cada registro que pertenece a un '16' rodaja. A los registros que pertenecen a los otros segmentos se les asigna el valor 0 .

Demostración aquí