Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Confronta la riga corrente con la riga precedente in SQL Server

Puoi utilizzare la seguente query:

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 sezioni (dette anche isole) di record consecutivi aventi lo stesso OutComeID valore. La query esterna utilizza grp per enumerare ogni record che appartiene a un '16' fetta. Ai record che appartengono alle altre sezioni viene assegnato il valore 0 .

Dimostrazione qui