sql >> Databasteknik >  >> RDS >> Sqlserver

Jämför nuvarande rad med föregående rad i SQL Server

Du kan använda följande fråga:

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

Fält grp identifierar delar (även kallade öar) av på varandra följande poster med samma OutComeID värde. Den yttre frågan använder grp för att räkna upp varje post som tillhör en '16' skiva. Posterna som hör till de andra segmenten tilldelas värdet 0 .

Demo här




  1. Varför genererar inte EF 4 association för FK-relation till kolumn med unikt index?

  2. Designa en normalisera databas för att få 5 närmaste granne med MySQL spatial index

  3. Finns det datavisualiseringsverktyg för postgresql som också kan visa interschemarelationer?

  4. Django migrations--är det möjligt att använda South mitt i projektet?