有一个名为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
我该怎么办?
答案 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
删除表中的行。