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

Comparer la ligne actuelle avec la ligne précédente dans SQL Server

Vous pouvez utiliser la requête suivante :

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

Champ grp identifie des tranches (également appelées îlots) d'enregistrements consécutifs ayant le même OutComeID évaluer. La requête externe utilise grp afin d'énumérer chaque enregistrement qui appartient à un '16' tranche. Les enregistrements appartenant aux autres tranches sont affectés de la valeur 0 .

Démo ici