2012-11-11 114 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命令是刪除整個表和thier模式定義。使用delete刪除表中的行。

+0

它不能運行,的SQLiteManager:可能的SQL語法錯誤:從commonprofit哪裏日期刪除(選擇名稱,最大(日期)來自commonprofit group的名稱);異常名稱:NS_ERROR_FAILURE 異常消息:組件返回失敗代碼:0x80004005(NS_ERROR_FAILURE)[mozIStorageConnection.createStatement] –

+0

此命令(如果有效)也將刪除記錄在其他'name'組中具有相同的'日期'。 –

+0

OOps - 發現了「DROP」而不是「DELETE」,但沒有檢查他的邏輯的其餘部分 - 將被編輯。 –