2013-12-17 4 views
0

두 행의 데이터를 비교해야합니다. 연속적인 행이 동일한 경우에는 하나의 오류 메시지가 표시됩니다. 이 코드는 내가 내 코드가 제대로 테스트되지두 개의 데이터 행을 비교해야합니다.

This should throw an error

원하는대로 작동하지 않습니다.

SELECT 
    CASE 
     WHEN activityId = activityId +1 THEN activityId = 'error' 
      ELSE activityId = activityId 
     END AS sortOrder,recordId, 
         activityId, 
         started, 
         completed, 
         userId 

    FROM log1644 
+2

샘플 데이터와 원하는 출력을 텍스트 형식으로 게시하십시오. – peterm

답변

0

그런 다음 또는 이전 행에 액세스 할 수 없습니다. 정확하게 말하면 실제로 다음 또는 이전 행이 없습니다. 즉, 데이터베이스 데이터에 지정하지 않으면 특정 순서가 없음을 의미합니다. 쿼리에 ORDER BY one_or_multiple_columns이 없으면 쿼리를 실행할 때마다 반환되는 결과가 다른 순서로 표시 될 수 있습니다. 그런 다음이

SELECT * FROM table alias_a 
INNER JOIN table alias_b ON a.id = b.id + 1 

같은 것을 일 것 자체에 테이블을 가입

  • 자체에 테이블을 조인
  • 사용 변수

:
당신이 두 가지 가능성을 가지고 말했다 CASE WHEN a.whatever = b.whatever THEN 'error' ELSE 'cool' END이 작동하지만, 예를 들어 다음 ID가가 아닌 경우와 같이 꽤 빨리 못 생길 수 있습니다.가끔 +2 행을 언젠가 삭제했거나 다른 원인으로 인해. 또는 성능상으로 이것은 어쨌든 좋지 않을 수 있습니다 ...

나는 이와 같은 경우 변수를 사용하는 것을 선호합니다.

SELECT 
yt.*, 
CASE WHEN @prevID = id THEN 'oops, same id as row before' ELSE 'another_id' END AS is_it_different, 
@prevID := id 
FROM your_table yt, 
(SELECT @prevID := 0) table_alias__variable_initialization 
ORDER BY id, another_column_determining_the_order_of_ids 

앞서 언급 한 것처럼 ORDER BY이 중요합니다.
CASE WHEN ... 변수 @prevID에는 여전히 이전 행의 값이 있습니다. 명령.의 다음 행에서 현재 행의 값이 변수에 지정됩니다.

+0

@Portlight 피드백이 좋을 것 같습니다 ... – fancyPants

관련 문제