2012-11-11 113 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”,但没有检查他的逻辑的其余部分 - 将被编辑。 –