Как сравнить две строки с помощью курсора - PullRequest
0 голосов
/ 16 июня 2011

У меня есть простая проблема, где я хочу сравнить текущую строку с предыдущей, и если они совпадают, то из RowID.Алос, когда я печатаю @abc и @ abc2, почему они дают мне одинаковый результат .?

Ниже мой код:

DECLARE 
             @abc float,
             @def datetime,

             @abc2 float,
             @def2 datetime


DECLARE  downTime SCROLL CURSOR  FOR
select D_ABC, D_DEF   

OPEN downTime
   FETCH First FROM downTime INTO @abc,@def 
   FETCH NEXT FROM downTime INTO  @abc2,@def2 

   print @abc
   print @abc2


      WHILE (@@FETCH_STATUS=0)

        BEGIN   

               // Out here I want to print the rowID's of those rows where @abc = @abc2

       END
CLOSE downTime

1 Ответ

2 голосов
/ 16 июня 2011

Вам не нужен курсор

  • Для каждой строки получить предыдущую
  • Сравните их

Что-то вроде

SELECT
   *
FROM
   myTable M
   CROSS APPLY
   (--get previous row
    SELECT TOP 1 *
    FROM myTable M2
    WHERE M2.ID < M.ID
    ORDER BY M2.ID
   ) foo
WHERE --compare
   foo.col1 = M.col1 AND foo.col2 = M.col2 etc

Чуть менее точный (что вы получите ложные срабатывания)

...
WHERE
  CHECKSUM(M.*) <> CHECKSUM(foo.*)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...