2012-11-11 2 views
0

commonprofit이라는 테이블이 있는데 이름, 날짜, 이익의 세 필드가 있습니다.
select name,max(date) from commonprofit group by name
날짜가 그룹 name, 가 지금은 명령에 의해 선택된 모든 레코드를 삭제할하여 최대입니다 많은 레코드를 얻을 수있는 명령은, 왜 내가 할 수없는 다음과 같은 :sqlite의 레코드 삭제

drop from commonprofit where date in (select name,max(date) from commonprofit group by name); 

delete from commonprofit where date=max(date) group by name; 

delete from commonprofit where date in (select name,max(date) from commonprofit group by name); 

둘 중 누구도 할 수 없습니다.

원시 데이터는 다음과 같습니다

name date profit 
1 2011/12 42359 
1 2010/12 32863 
1 2009/12 24293 
1 2008/12 16436 
1 2007/12 15442 
2 2011/12 91634 
2 2010/12 58410 
2 2009/12 50668 
2 2008/12 54297 
3 2009/12 12352 
3 2008/12 12352 
3 2007/12 14226 

내가 삭제하려는 것은 :

name date profit 
1  2011/12 42359 
2  2011/12 91634 
3  2009/12 12352 

내가 얻고 싶은 것은 :

name date profit 
1 2010/12 32863 
1 2009/12 24293 
1 2008/12 16436 
1 2007/12 15442 
2 2010/12 58410 
2 2009/12 50668 
2 2008/12 54297 
3 2008/12 12352 
3 2007/12 14226 

내가 어떻게 할 수 있습니까?

답변

0

이와 같이 레코드를 삭제하는 가장 쉬운 방법은 하나의 고유 한 열로 레코드를 삭제하는 것입니다. 기본 키를 표시하지 않으므로 rowid을 사용하고 있습니다.
IN는 하나의 열이있는 하위 쿼리가 필요합니다, 그래서 우리는 여분의 간접 사용해야합니다 :

DELETE FROM commonprofit 
WHERE rowid IN (SELECT rowid 
       FROM (SELECT rowid, 
          MAX(date) 
         FROM commonprofit 
         GROUP BY name)) 
-1

당신은 delete를 사용해야하지 drop

drop 명령은 전체 테이블, 자신의 스키마 정의를 삭제하는 것입니다. delete을 사용하여 테이블에서 행을 삭제하십시오.

+0

은,는 SQLiteManager를 실행할 수 없습니다 : 가능성 SQL 구문 오류 : 이름을 선택합니다 (여기서 날짜 commonprofit에서 삭제, 최대 (날짜로) commonprofit 그룹에서 이름으로); [식의 일부인 SELECT에 대해 하나의 결과 만 허용] 예외 이름 : NS_ERROR_FAILURE 예외 메시지 : 구성 요소가 오류 코드를 반환했습니다 : 0x80004005 (NS_ERROR_FAILURE) [mozIStorageConnection.createStatement] –

+0

이 명령 (작동하는 경우)도 삭제됩니다 다른'name' 그룹에 같은'date'를 가진 레코드. –

+0

OOps - "DELETE"보다는 "DROP"를 발견했으나 그의 로직의 나머지 부분은 점검하지 않았습니다 - 편집합니다. –