2014-02-15 39 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)"; 

任何人都可以提高我的查詢嗎? (我不擅長與查詢)

+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-表除了-最新-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可根據需要近十或最新的10

YOUR_SORT_FIELD是標識的最新數據現場進行更換

3

SQLiteDatabasedelete()發生在一個WHERE表達,而不是一個SELECT聲明。

如果您選擇返回您想保留那些行:

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這樣的:

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

ROWID是一個別名錶格的INTEGER PRIMARY KEY;由於任何非零ID都被選中,因此您在子查詢中使用的WHERE條件不是必需的。

相關問題