2012-11-27 4 views
2

..... (ID, 이름, EVENT)큰 테이블에서 행 쌍을 선택하는 방법은 무엇입니까? 표에서

데이터 :

(1,BOB,E)  
(2,JANE,B)  
(3,JOE,C)  
(4,TOM,A) 
(5,JANE,B)  
(6,JOE,C)  
(7,BEN,D)  
(8,TOM,B)  
(9,JANE,D)  
(10,JOE,A)  
(11,JANE,B)  
(12,BOB,C)  
(13,JOE,C)  
.  
.  
. 

원하는 출력 :

(2,JANE,B)  
(3,JOE,C)  
(5,JANE,B)  
(6,JOE,C) 

내가 어디에 제인 각 인스턴스를 나열하기 위해 노력하고있어 , B와 Joe, C가 연속적으로 테이블에 나타납니다. sqlite 사용.

도움을 주시면 감사하겠습니다.

+0

그 쌍에는 공통점이 있습니까? 그건 당신이 그들을 빼내는 데 도움이 될 것입니다. :-) 'IN'연산자로 where 절에 이름과 이벤트를 지정하면 작업을 수행하지 않습니까? – bonCodigo

+0

나는 당신이 가장 중요한 요구 사항을 완전히 건너 뛰었 기 때문에 나의 대답을 되찾았다. : CONSECUTIVE RECORDS .... :) 죄송합니다. – bonCodigo

답변

1

SQLite에서도 작동하는 표준 SQL을 사용하여이 작업을 수행 할 수 있습니다. 주어진 행을 다음 행과 이전 행에 연결 한 다음 조건을 확인하는 것입니다.

select t.* 
from t join 
    t tnext 
    on tnext.id = t.id + 1 join 
    t tprev 
    on tprev.id = t.id - 1 
where (t.name = 'Jane' and t.event = 'B' and tnext.name = 'Joe' and tnext.event = 'C') or 
     (tnext.name = 'Jane' and tnext.event = 'B' and t.name = 'Joe' and t.event = 'C') or 
     (t.name = 'Jane' and t.event = 'B' and tprev.name = 'Joe' and tprev.event = 'C') or 
     (tprev.name = 'Jane' and tprev.event = 'B' and t.name = 'Joe' and t.event = 'C') 
+0

안녕하세요 고든 :) 좋은 대답, btw 위도가'OR' 오류가 발생합니다. 나는 OP가 그것을 알아 차릴 것이라고 생각한다. :) – bonCodigo

관련 문제