sql >> Database >  >> RDS >> Sqlserver

Vergelijk de huidige rij met de vorige rij in SQL Server

U kunt de volgende zoekopdracht gebruiken:

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

Veld grp identificeert segmenten (ook wel eilanden genoemd) van opeenvolgende records met dezelfde OutComeID waarde. De buitenste query gebruikt grp om elk record op te sommen dat hoort bij een '16' plak. De records die bij de andere slices horen, krijgen de waarde 0 .

Demo hier




  1. Hoe de directory / hiërarchie / boomstructuur in de database op te slaan?

  2. SQL-syntaxis of databasebeperkingen?

  3. SSMS geeft systeemgeheugen niet vrij

  4. gegevens importeren van de ene tabel naar een andere tabel