私はSQLiteDBを持っています。
SELECT messdatum, count(*) as anzahl
from lipo
GROUP BY Messdatum
ORDER BY anzahl desc;
結果はいくつかの行になります。これは、同じMessdatum
の重複があることを示しています。 sqliteデータベースからのみ重複を削除するにはどうすればよいですか? (messdatumが同じであるanzahl-1レコードを削除する必要がありますか?)誰かアドバイスがありますか?
PS:私はこのリンクを見つけました 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;
これが削除コマンドのエラーです。どうやってやるの? holdkey.anzahlをlipoの追加の列に更新しようとしました
UPDATE lipo,holdkey set lipo.duplettenzahl = holdkey.anzahl WHERE lipo.messdatum = holdkey.messdatum ;
しかし、これも不可能です。リポのdublettenzahlとしてanzahlを使用する場合、dublettenzahl> 0のlipoからすべてのレコードを削除できます。助けてください。ありがとう
SQLiteには 特別な列、ROWID
デフォルトですべてのテーブルに作成されます( スイッチをオフにするWITHOUT ROWID
修飾子を使用できますが、非常にそうする前に必ず)。
これは、重複のセット内の特定の行を識別できることを意味します。たとえば、値の最初のエントリを見つけることができます。
SELECT messdatum, MIN(ROWID) FROM lipo
したがって、重複を削除する1つの方法は、次のようになります。
DELETE FROM lipo
WHERE rowid NOT IN (
SELECT MIN(rowid)
FROM lipo
GROUP BY messdatum
)
私は解決策を得ました:
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 ;