Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Сравнете текущия ред с предишния ред в SQL Server

Можете да използвате следната заявка:

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

Поле grp идентифицира части (наричани още острови) от последователни записи, имащи един и същ OutComeID стойност. Външната заявка използва grp за да изброите всеки запис, който принадлежи към '16' парче. На записите, които принадлежат към другите срезове, се присвоява стойност 0 .

Демо тук




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо не мога да направя заявка OFFSET/FETCH на моя SQL Server?

  2. t-sql заявка между таблица със събития и период от време

  3. Изтриване на дублиращи се редове в SQL Server

  4. Как да използвате семантично търсене в SQL Server

  5. Как да проверя съществуването на дефиниран от потребителя тип таблица в SQL Server 2008?