Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Vergleichen Sie die aktuelle Zeile mit der vorherigen Zeile in SQL Server

Sie können die folgende Abfrage verwenden:

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

Feld grp identifiziert Segmente (auch Inseln genannt) aufeinanderfolgender Datensätze mit derselben OutComeID Wert. Die äußere Abfrage verwendet grp um jeden Datensatz aufzuzählen, der zu einem '16' gehört Scheibe. Den Datensätzen, die zu den anderen Slices gehören, wird der Wert 0 zugewiesen .

Demo hier