2012-11-26 2 views
1

RUN_TIME 및 OPERATION_NAME 열이있는 테이블이 있습니다. 각 작업의 N 인스턴스보다 오래된 테이블을 삭제하여 테이블을 자르고 싶습니다. 예를 들어 : 입력 테이블이SQLITE 3 - 항목 당 N 개보다 오래된 인스턴스를 삭제합니다.

RUN     OPERATION 
13/11/2012 05:39 GAM010P0 
14/11/2012 05:39 GAM010P0 
15/11/2012 05:39 GAM010P0 
13/11/2012 05:09 GAM020P0 
14/11/2012 05:09 GAM020P0 
15/11/2012 05:09 GAM020P0 
16/11/2012 05:09 GAM020P0 
01/11/2012 17:09 GAM060P0 

입니다 그리고 각 작업이 개 가장 최근의 인스턴스를 유지하려는 경우, 출력은 다음과 같습니다

RUN     OPERATION 
14/11/2012 05:39 GAM010P0 
15/11/2012 05:39 GAM010P0 
15/11/2012 05:09 GAM020P0 
16/11/2012 05:09 GAM020P0 
01/11/2012 17:09 GAM060P0 

은 일반적으로 내가 분석 순위를 사용하십시오 RUN_TIME에 따라 순위를 매기고 OPERATION_NAME에 의해 그룹화하는 기능; 그러나이 테이블은 sqlite DB에 있기 때문에이 작업을 수행하려면 삭제 SQL 문을 작성할 수 없습니다.

답변

1

데이터베이스에있는 동일한 작업에 대한 레코드 수를 계산해야합니다. 특정 레코드, 최신 버전 인 타임 스탬프 두 개 이상의 다른 레코드가, 경우 은,이 기록은 삭제해야합니다

DELETE FROM MyTable 
WHERE (SELECT COUNT(*) 
     FROM MyTable AS Newer 
     WHERE Newer.OPERATION = MyTable.OPERATION AND 
      Newer.RUN > MyTable.RUN 
    ) >= 2 

제발하지 당신이 가진 yyyy-mm-dd 같은 날짜 형식을 사용한다는 것을 가장 중요한 필드는 처음부터 날짜 비교가 작동하도록합니다.

관련 문제