我有一个SQLite DB,其中的语句:
SELECT messdatum, count(*) as anzahl
from lipo
GROUP BY Messdatum
ORDER BY anzahl desc;结果出现了一些行,这表明我有一些具有相同Messdatum的副本。怎样才能只从我的sqlite db中删除重复项?(它应该删除消息基准相同的anzahl 1记录吗?)有人有什么建议吗?
PS:我找到了这个链接How to remove duplicate from Microsoft,但在sqlite方言上有问题。由于sqlite语法,我得到了一些错误。所以f.e.我可以这样做:
INSERT into holdkey SELECT messdatum, count(*) as anzahl from lipo group by messdatum having count(*) > 1;
INSERT into holddups SELECT DISTINCT lipo.* from lipo, holdkey where lipo.Messdatum = holdkey.messdatum ;
DELETE lipo from lipo, holdkey where lipo.messdatum = holdkey.messdatum;以下是delete命令中的错误。我该怎么做呢?我尝试用lipo语言将holdkey.anzahl更新为一个额外的列。
UPDATE lipo,holdkey set lipo.duplettenzahl = holdkey.anzahl WHERE lipo.messdatum = holdkey.messdatum ; 但这也是不可能的。如果我在lipo中将anzahl作为dublettenzahl,我可以从lipo中删除dublettenzahl > 0的所有记录。请帮帮我!谢谢
发布于 2014-09-17 16:18:44
默认情况下,SQLite在每个表上都创建了一个special column, ROWID (您可以使用WITHOUT ROWID修饰符进行switch it off,但在执行此操作之前请务必确保)。
这意味着我们可以识别重复集合中的特定行,例如,查找某个值的第一个条目:
SELECT messdatum, MIN(ROWID) FROM lipo因此,删除重复项的一种方法可能是:
DELETE FROM lipo
WHERE rowid NOT IN (
SELECT MIN(rowid)
FROM lipo
GROUP BY messdatum
)发布于 2014-09-17 16:07:37
我得到了解决方案:
INSERT into holdkey SELECT messdatum, count(*) as anzahl,NameISO from lipo group by messdatum having count(*) > 1;
INSERT into holddups SELECT DISTINCT lipo.*,1 from lipo, holdkey where lipo.Messdatum = holdkey.messdatum group by messdatum;
INSERT into lipo_mit_dz SELECT *, count(*) as DublettenZahl from lipo group by messdatum ORDER BY Dublettenzahl desc ;
DELETE from lipo_mit_dz where Dublettenzahl > 1;
INSERT into lipo_mit_dz SELECT * from holddups ; https://stackoverflow.com/questions/25884095
复制相似问题