删除sqlite中的记录

时间:2012-11-11 04:15:25

标签: sqlite

有一个名为commonprofit的表,有三个字段:名称,日期,利润 select name,max(date) from commonprofit group by name
该命令可以获取组name的日期最多的许多记录, 现在我想删除命令选择的每条记录,为什么我不能这样做如下:

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

我该怎么办?

2 个答案:

答案 0 :(得分:0)

删除此类记录的最简单方法是使用单个唯一列标识它们。 您没有显示主键,因此我使用的是rowid IN需要一个带有单列的子查询,因此我们必须使用额外的间接:

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

答案 1 :(得分:-1)

您应该使用delete而不是drop

drop命令用于删除整个表及其架构定义。使用delete删除表中的行。