-1

有一个名为 commonprofit 的表,三个字段:name ,date,profit。
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

我能怎么做?

4

2 回答 2

0

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

DELETE FROM commonprofit
WHERE rowid IN (SELECT rowid
                FROM (SELECT rowid,
                             MAX(date)
                      FROM commonprofit
                      GROUP BY name))
于 2012-11-11T10:35:37.960 回答
-1

你应该使用delete而不是drop

drop命令用于删除整个表及其模式定义。用于delete从表中删除行。

于 2012-11-11T04:19:46.097 回答