2014-02-15 4 views
1

아래 쿼리를 실행해야합니다.지난 10 일 보관하고 다른 모든 행을 삭제하십시오 - sqlite

db.delete(TABLE_SESSIONS, selectQuery, null); 

선택 쿼리는 마지막 10 개 항목을 제외한 쿼리 여야합니다.

어떻게해야합니까?

String selectQuery = "SELECT * FROM " + TABLE_SESSIONS +" WHERE " +KEY_SESSION_ID+ " IN (SELECT "+KEY_SESSION_ID + " FROM "+TABLE_SESSIONS+" WHERE " +KEY_SESSION_ID+ " ORDER BY Col LIMIT 10)"; 

누구든지 내 검색어를 개선 할 수 있습니까? 마지막으로 10 개 최신 10

YOUR_SORT_FIELD 최신 데이터를 식별하는 필드가 필요한 경우

+0

이 쿼리를 통과하면 정확히 무엇을 얻게됩니까? – InnocentKiller

+0

[sql-query-delete-all-records-from-the-table-except-latest-n] (http://stackoverflow.com/questions/578867/sql-query-delete-all-records-from)을 참조하십시오. -the-table-except-latest-n) –

답변

3

다음 쿼리를 시도하십시오.

String selectQuery = "SELECT * FROM " + TABLE_SESSIONS +" WHERE " +KEY_SESSION_ID+ " IN (SELECT "+KEY_SESSION_ID + " FROM "+TABLE_SESSIONS+" WHERE " +KEY_SESSION_ID+ " ORDER BY Col DESC LIMIT 10)"; 
2

SELECT * FROM TABLE_SESSIONS WHERE YOUR_SORT_FIELD NOT IN (select TOP 10 YOUR_SORT_FIELD from TABLE_SESSIONS order by YOUR_SORT_FIELD DESC)

DESCASC 변경할 수 있습니다 (I 쿼리와 함께 좋은 아니에요)

3

SQLiteDatabasedelete()SELECTWHERE 식하지합니다.

선택 유지하려는 그 행을 반환하는 경우 :

db.delete(TABLE_SESSIONS, 
    "ROWID NOT IN (SELECT ROWID FROM " + TABLE_SESSIONS + " ORDER BY Col LIMIT 10)", 
    null); 

ROWID는 별칭입니다 :

String selectQuery = "SELECT * FROM " + TABLE_SESSIONS +" WHERE " +KEY_SESSION_ID+ " IN (SELECT "+KEY_SESSION_ID + " FROM "+TABLE_SESSIONS+" WHERE " +KEY_SESSION_ID+ " ORDER BY Col LIMIT 10)" 

이 ... 당신이 사용할 수를 같은 NOT IN을 사용하여 삭제 테이블의 INTEGER PRIMARY KEY; 0이 아닌 ID가 선택되면 subselect에있는 WHERE 조건이 필요하지 않습니다.

관련 문제