2014-03-31 4 views
1

테이블의 시퀀스를 테스트해야하며 잘못된 레코드를 삭제해야합니다. 예 : 나는 worng 기록을 삭제하면시퀀스를 제어하는 ​​방법?

DATE    DriverId CodeId 
2014/03/01 14:00:00, 7168,  22  -- GO 
2014/03/01 14:30:00, 7168,  23  -- STOP 
2014/03/01 14:40:00, 7168,  22  -- GO 
2014/03/01 15:10:00, 7168,  22  -- GO  <--- delete this record 
2014/03/01 16:00:00, 7168,  23  -- STOP 

, 나는 날짜는 시퀀스 순서가 가정 SQL 서버를 2012

+0

왜 그런 것을 삭제합니까? –

+0

22에서 23까지 경과 된 시간을 계산해야하기 때문에, 예 23처럼 레코드 23을 잃어 버리면 다음 시간을 가져와이 시간을 포함해야합니다. 이것은 GPRS로 레코드를 수신하고 예제 에서처럼 레코드를 풀 수 있기 때문입니다. – Capanga

+0

왜이 질문이 취소 되었습니까? – cha

답변

1

을 사용하여 GO & 사이에 정지

임 시간을 계산해야한다, 그것은 보인다 값이 이전 값과 동일한 값을 삭제하려고합니다.

with todelete as (
     select t.*, lag(codeid) over (order by "date") as prev_codeid 
     from table t 
) 
delete from todelete 
    where prev_codeid = codeid; 

이는 SQL Server 2012 구문입니다. 상관 하위 쿼리를 사용하는 이전 버전에서이 작업을 수행 할 수 있습니다.

with todelete as (
     select t.*, 
      (select top 1 codeid 
       from table t2 
       where t2."date" < t."date" 
       order by t2.date desc 
      ) as prev_codeid 
     from table t 
) 
delete from todelete 
    where prev_codeid = codeid; 
+0

고맙습니다. 고든, 해결책을 찾아 보겠습니다. 나는 나중에 논평 할 것이다. – Capanga

+0

잘 작동합니다. 고맙습니다. – Capanga

관련 문제